# include<stdio.h>
# include<cstdio>
# include<cstring>
# include<vector>
# include<algorithm>
using namespace std;
struct node {
int weight;
vector<int>child;
}node[110];
int n, m, s;
vector<vector<int>> res;
vector<int>path;
bool cmp(int a, int b) {
return node[a].weight > node[b].weight;
}
void dfs(int index,int num,int sum) {
if (sum > s) return;
if (sum == s) {
if (node[index].child.size() != 0) return;
res.push_back(path);
return;
}
for (int i = 0; i < node[index].child.size(); i++) {
int child = node[index].child[i];
path.push_back(node[child].weight);
dfs(child, num + 1, sum + node[child].weight);
path.pop_back();
}
}
int main() {
scanf("%d%d%d", &n, &m, &s);
for (int i = 0; i < n; i++) {
scanf("%d", &node[i].weight);
}
int id, k, child;
for (int j = 0; j < m; j++) {
scanf("%d%d", &id, &k);
for (int i = 0; i < k; i++) {
scanf("%d", &child);
node[id].child.push_back(child);
}
sort(node[id].child.begin(), node[id].child.end(), cmp);
}
path.push_back(node[0].weight);
dfs(0, 1, node[0].weight);
sort(res.begin(), res.end());
reverse(res.begin(), res.end());
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < res[i].size(); j++) {
printf("%d", res[i][j]);
if (j < res[i].size() - 1) printf(" ");
}
if (i < res.size() - 1) printf("\n");
}
return 0;
}
算法笔记有坑
这位博主写了
https://blog.csdn.net/zxc0074869/article/details/122786262