#include<stdio.h>
#include<iostream>
#include<math.h>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
using namespace std;
struct node{
int value;
vector<int> child;
}tree[110];
bool cmp(int a, int b){
if(tree[a].value!=tree[b].value)
return tree[a].value>tree[b].value;
return 0;
}
vector<vector<int>> ans;
vector<int>aa;
void find(int index,int s,int n,int sum){
if(index>=n||(sum+tree[index].value)>s){
//aa.clear();
return;
}
if((sum+tree[index].value)<s){
aa.push_back(tree[index].value);
sum+=tree[index].value;
for(int i=0;i<tree[index].child.size();i++){
find(tree[index].child[i],s,n,sum);
}
aa.pop_back();//important
}
if((sum+tree[index].value)==s){
if(tree[index].child.size()!=0) return;
aa.push_back(tree[index].value);
ans.push_back(aa);
aa.pop_back();
return;
}
}
int main(){
// freopen("in.txt","r",stdin);
int n,m,s;
cin>>n>>m>>s;
// vector<node> tree(n);
for(int i=0;i<n;i++){
cin>>tree[i].value;
}
if(n==1&&s==tree[0].value){
cout<<tree[0].value;
return 0;
}
for(int i=0;i<m;i++){
int id,k;
cin>>id>>k;
for(int j=0;j<k;j++){
int ch;
cin>>ch;
tree[id].child.push_back(ch);
}
sort(tree[id].child.begin(),tree[id].child.end(),cmp);
}
find(0,s,n,0);
for(int i=0;i<ans.size();i++){
for(int j=0;j<ans[i].size();j++){
if(j!=0){
cout<<" ";
}
cout<<ans[i][j];
}
cout<<endl;
}
}
把find()
函数里if((sum+tree[index].value)<s)
和if((sum+tree[index].value)==s)
两个代码块反一下就过啦,好奇怪,我不理解!