DFS遍历
//
// main.cpp
// PATA1053
//
// Created by Phoenix on 2018/2/14.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int n, m, value;
struct Node {
int weight;
vector<int> v;
}node[110];
bool cmp(int a, int b) {
return node[a].weight > node[b].weight;
}
vector<int> temp;
void DFS(int s){
if(node[s].v.size() == 0){
temp.push_back(s);
int ans = 0;
for(int i = 0; i < temp.size(); i++) {
ans += node[temp[i]].weight;
}
//printf("%d %d\n", ans, value);
if(ans == value) {
for(int i = 0; i < temp.size(); i++) {
printf("%d", node[temp[i]].weight);
if(i < temp.size() - 1) printf(" ");
else printf("\n");
}
}
temp.pop_back();
return;
}
temp.push_back(s);
for(int i = 0; i < node[s].v.size(); i++) {
DFS(node[s].v[i]);
}
temp.pop_back();
}
int main(int argc, const char * argv[]) {
scanf("%d %d %d", &n, &m, &value);
for(int i = 0; i < n; i++) {
scanf("%d", &node[i].weight);
}
for(int i = 0; i < m; i++) {
int root, k;
scanf("%d %d", &root, &k);
for(int j = 0; j < k; j++) {
int a;
scanf("%d", &a);
node[root].v.push_back(a);
}
sort(node[root].v.begin(), node[root].v.end(), cmp);
}
DFS(0);
return 0;
}