一个最最基本的dfs问题
#include<bits/stdc++.h>
using namespace std;
struct node{
int w;
vector<int>child;
}t[100];
int s;
int sum=0;
vector<int>ans;
vector<vector<int> >q;
void dfs(int root){
for(int i=0;i<t[root].child.size();i++){
sum+=t[t[root].child[i]].w;
ans.push_back(t[root].child[i]);
dfs(t[root].child[i]);
ans.pop_back();
sum-=t[t[root].child[i]].w;
}
if(sum==s&&t[root].child.size()==0){
q.push_back(ans);
}
}
bool cmp(vector<int> a,vector<int> b){
for(int i=1;i<min(a.size(),b.size());i++){
if(a[i]!=b[i])return t[a[i]].w>t[b[i]].w;
}
}
int main(){
int n,m;
cin>>n>>m>>s;
for(int i=0;i<n;i++){
cin>>t[i].w;
}
int temp,k,a;
for(int i=0;i<m;i++){
cin>>temp>>k;
for(int j=0;j<k;j++){
cin>>a;
t[temp].child.push_back(a);
}
}
int root=0;
ans.push_back(root);
sum+=t[root].w;
dfs(root);
sort(q.begin(),q.end(),cmp);
for(int i=0;i<q.size();i++){
for(int j=0;j<q[i].size();j++){
printf("%d",t[q[i][j]].w);
if(j!=q[i].size()-1)printf(" ");
}
printf("\n");
}
return 0;
}