求从根节点到叶子节点路径权值和等于w的全部路径
单调递减输出,我们直接把路径上的权值存到二维vector里,对vector进行排序。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n,m,w,r,k,x,v[1010],cnt,idx;
vector<int>e[1010],ans[1010],res;
void dfs(int u,int s)
{
if(s > w) return ;
if(s == w && !e[u].size())
{
ans[idx ++] = res;
return ;
}
for(auto it : e[u])
{
res.push_back(v[it]);
dfs(it,s + v[it]);
res.pop_back();
}
}
int main()
{
cin >> n >> m >> w;
for(int i = 0; i < n; i ++) cin >> v[i];
for(int i = 0; i < m; i ++)
{
cin >> r >> k;
while(k --)
{
cin >> x;
e[r].push_back(x);
}
}
res.push_back(v[0]);
dfs(0,v[0]);
sort(ans,ans + idx,[](vector<int> a,vector<int> b)
{
return a > b;
});
for(int i = 0; i < idx; i ++)
{
for(int j = 0; j < ans[i].size(); j ++)
{
if(j != 0) cout << ' ';
cout << ans[i][j];
}
cout << '\n';
}
return 0;
}