- vector的降序排列比较器:cmp或者greater<vector>()
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
const int maxn = 110;
int n,m,p,idx;
int node[maxn];
vector<int> tree[maxn];
vector<int> res;
vector<vector<int> > tmp;
int print() {
tmp.push_back(res);
return 0;
}
bool cmp(vector<int> a,vector<int> b) {
for(int i=0;i<min(a.size(),b.size());i++) {
if(a[i]>b[i]) return true;
if(a[i]<b[i]) return false;
}
return false;
}
void dfs(int rt,int sum) {
if(tree[rt].size()==0) {
if(sum == p) print();
}
else
for(int i=0;i<tree[rt].size();i++) {
int x = tree[rt][i];
if(node[x] + sum <= p) {
res.push_back(node[x]);
dfs(x,node[x]+sum);
res.pop_back();
}
}
}
int main()
{
cin >> n >> m >> p;
for(int i=0;i<n;i++) cin >> node[i];
for(int i=0;i<m;i++) {
int id,k;
cin >> id >> k;
for(int j=0;j<k;j++) {
int x;
cin >> x;
tree[id].push_back(x);
}
}
res.push_back(node[0]);
dfs(0,node[0]);
sort(tmp.begin(),tmp.end(),cmp);
for(int i=0;i<tmp.size();i++) {
cout << tmp[i][0];
for(int j=1;j<tmp[i].size();j++) {
cout <<" "<<tmp[i][j];
}
if(i!=tmp.size()-1) cout << endl;
}
return 0;
}