1053 Path of Equal Weight (30 分)
思路有空更新
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> v[1010], path[1010];
int weight[1010], a[1010];
int n, m, s, ret;
void dfs(int x, int h, int sum) {
a[h] = x;
if(sum == s && v[x].size() == 0){
for(int i = 0; i <= h; ++i)
path[ret].push_back(weight[a[i]]);
ret++;
return;
}
for(int i = 0; i < v[x].size(); ++i)
dfs(v[x][i], h + 1, sum + weight[v[x][i]]);
}
bool cmp(vector<int> v1, vector<int> v2){
for(int i = 0; i < v1.size() && i < v2.size(); ++i)
if(v1[i] != v2[i])
return v1[i] > v2[i];
}
int main() {
cin >> n >> m >> s;
for(int i = 0; i < n; ++i)
cin >> weight[i];
while(m--) {
int id, k, x;
cin >> id >> k;
while(k--){
cin >> x;
v[id].push_back(x);
}
}
dfs(0, 0, weight[0]);
sort(path, path + ret, cmp);
for(int i = 0; i < ret; ++i)
for(int j = 0; j < path[i].size(); ++j)
cout << path[i][j] << " \n"[j == path[i].size() - 1];
}