多叉树的dfs,要求找出所有与给定数据相等的路径,然后按照降序输出,这个题可以直接在dfs的时候输出,做法就是在输入的时候对每个叶子的节点都按照从大到小的顺序排序即可,
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define sz(x) ((int) x.size())
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
const int N = 105;
int n, m, s, w[N];
vi tree[N], temp;
bool cmp(int a, int b) {
return w[a] > w[b];
}
void solve(int root, int sum) {
if (sum + w[root] > s) return;
if (!sz(tree[root])) {
sum += w[root];
if (sum < s) return;
temp.pb(w[root]);
for (int i = 0; i < sz(temp); i++) cout << temp[i] << (i < sz(temp) - 1 ? " " : "\n");
temp.pop_back();
return;
}
temp.pb(w[root]);
for (int i = 0; i < sz(tree[root]); i++) solve(tree[root][i], sum + w[root]);
temp.pop_back();
}
int main() {
cin >> n >> m >> s;
for (int i = 0; i < n; i++) cin >> w[i];
while (m--) {
int fa, k; cin >> fa >> k;
for (int i = 0; i < k; i++) { int x; cin >> x; tree[fa].pb(x); }
sort(all(tree[fa]), cmp);
}
solve(0, 0);
return 0;
}