#include <string>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
vector<int>v[105];
int value[101];
int n,s,m;
int fa[105];//记录前面一个node
bool cmp(int x,int y)
{
return value[x]>value[y];
}
void print(int u)
{
vector<int>tp;
while(u)
{
tp.push_back(u);
u=fa[u];
}
cout<<value[0]<<" ";
for(int i=tp.size()-1;i>0;i--)
cout<<value[tp[i]]<<" ";
if(tp.size()) cout<<value[tp[0]]<<endl;
}
void dfs(int v0,int w)
{
if(w+value[v0]==s&&v[v0].size()==0)
{
print(v0);
return ;
}
if(w+value[v0]>s)
return;
for(int i=0;i<v[v0].size();i++)
{
int t=v[v0][i];
dfs(t,w+value[v0]);
}
}
int main()
{
cin>>n>>m>>s;
for(int i=0;i<n;i++)
{
cin>>value[i];
}
if(n==1)
{
cout<<value[0]<<endl;
return 0;
}
for(int i=1;i<=m;i++)
{
int a,b,l;
cin>>a>>l;
for(int j=1;j<=l;j++)
{
cin>>b;
v[a].push_back(b);
fa[b]=a;
}
sort(v[a].begin(),v[a].end(),cmp);
}
dfs(0,0);
}
1053. Path of Equal Weight (30)
最新推荐文章于 2022-04-13 00:26:50 发布