简单DFS
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<queue> #include<stack> #include<string> #include<algorithm> using namespace std; const int maxn=100+10; vector<int>Tree[maxn]; long long val[maxn]; long long path[maxn]; int n,m; long long W; bool cmp(const int &a,const int &b) { return val[a]>val[b]; } void read() { scanf("%d%d%lld",&n,&m,&W); for(int i=0;i<n;i++) scanf("%lld",&val[i]); for(int i=1;i<=m;i++) { int id; scanf("%d",&id); int k; scanf("%d",&k); while(k--) { int to; scanf("%d",&to); Tree[id].push_back(to); } } } void dfs(long long sum,int x,int deep) { if(sum>W) return; if(sum==W) { if(Tree[x].size()==0){ printf("%lld",val[0]); for(int i=0;i<deep;i++) printf(" %lld",path[i]); printf("\n"); } return; } for(int i=0;i<Tree[x].size();i++) { path[deep]=val[Tree[x][i]]; dfs(sum+val[Tree[x][i]],Tree[x][i],deep+1); } } void work() { for(int i=0;i<n;i++) sort(Tree[i].begin(),Tree[i].end(),cmp); dfs(val[0],0,0); } int main() { read(); work(); return 0; }
时间: 2024-11-05 00:37:24