# include <cstdio> # include <cstring> # include <queue> # include <vector> # include <algorithm> using namespace std; struct node{ int seq,ww; }c_id[110]; vector<int> v[110]; int l,s,ans,sum,dd[110],dis[110],end_w[110][110]; void dfs(int x) { sum += dd[x]; dis[ans++] = dd[x]; int i; if(sum >= s) { if(sum == s && v[x].size() == 0) { for(i = 0;i < ans;i++) end_w[l][i] = dis[i]; l++; } } else { for(i = 0;i < v[x].size();i++) { int kk = v[x][i]; dfs(kk); } } sum -= dd[x]; dis[--ans] = 0; } void out() { int i,j = 0; while(l--) { for(i = 0;end_w[j][i] != 0;i++) printf(i == 0 ? "%d" : " %d",end_w[j][i]); printf("\n"); j++; } } bool cmp(node a,node b) { return a.ww > b.ww; } int main() { int n,m; while(scanf("%d%d%d",&n,&m,&s)==3) { int i,j; for(i = 0;i < n;i++) { scanf("%d",&dd[i]); v[i].clear(); dis[i] = 0; for(j = 0;j < n;j++) end_w[i][j] = 0; } for(i = 0;i < m;i++) { int j,id,num,ss; scanf("%d%d",&id,&num); for(j = 0;j < num;j++) { scanf("%d",&ss); c_id[j].seq = ss; c_id[j].ww = dd[ss]; } sort(c_id,c_id+num,cmp); for(j = 0;j < num;j++) v[id].push_back(c_id[j].seq); } l = ans = sum = 0; dfs(0); out(); } return 0; } |
双击代码区域可以查看未格式化的原始代码
查看提交