#include<algorithm> #include<iostream> #include<cstdio> using namespace std;
struct { int w; vector<int> child; };
int n,m,target; vector<Node> node; vector<int> path;
bool cmp(int a,int b){ return node[a].w>node[b].w; }
void dfs(int index,int nodeNum,int sum){ if(sum>target){ return ; } if(sum==target){ if(node[index].child.size()!=0){ return ; } for(int i=0;i<nodeNum;i++){ printf("%d%c",node[path[i]].w,i != nodeNum-1 ? ' ':'n'); } return ; } for(int i=0;i<node[index].child.size();i++){ int child=node[index].child[i]; path[nodeNum]=child; dfs(child,nodeNum+1,sum+node[child].w); } }
int main(){ scanf("%d%d%d",&n,&m,&target); node.resize(n); path.resize(n); for(int i=0;i<n;i++){ scanf("%d",&node[i].w); } int tem,cnt; for(int i=0;i<m;i++){ scanf("%d%d",&tem,&cnt); node[tem].child.resize(cnt); for(int j=0;j<cnt;j++){ scanf("%d",&node[tem].child[j]); } sort(node[tem].child.begin(),node[tem].child.end(),cmp); } dfs(0,1,node[0].w); return 0; }
|
近期评论