#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=110;
int N,M,S;
int w[maxn];
vector<int> Adj[maxn];
vector<int> path;
int W;
void DFS(int i){
if(Adj[i].empty()){
if(W==S){
printf("%d",w[path[0]]);
for(int j=1;j<path.size();j++){
printf(" %d",w[path[j]]);
}
printf("\n");
}
return;
}
for(int j=0;j<Adj[i].size();j++){
int v=Adj[i][j];
W+=w[v];
path.push_back(v);
if(W<=S){
DFS(v);
}
W-=w[v];
path.pop_back();
}
}
bool cmp(const int &a, const int &b){
return w[a]>w[b];
}
int main(void){
scanf("%d%d%d",&N,&M,&S);
for(int i=0;i<N;i++) scanf("%d",&w[i]);
int id,k,n;
for(int i=0;i<M;i++){
scanf("%d%d",&id,&k);
for(int j=0;j<k;j++){
scanf("%d",&n);
Adj[id].push_back(n);
}
sort(Adj[id].begin(),Adj[id].end(),cmp);
}
W=w[0];
path.push_back(0);
DFS(0);
return 0;
}
04-19
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交