题解:AT_abc441_d [ABC441D] Paid Walk
wrz_pussycat296 · · 题解
前言
这次 ABC 切下了 ABCDE 喵,很满意的,于是来写几篇题解!
思路
看到这题 400 分,知道一定不能特别难,然后观察数据。
我们发现
我们可以考虑一个函数来 DFS。函数里尽量多传参,把走的边数以及一共的价值都作为参数传进去,如果走的边数达到了
把走的边数以及一共的价值都作为参数传进去的好处是返回时就自动把加进去的减回来了,无需处理过多细节。
最后注意如果没有合法的也要输出换行。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
int w,x;
};
vector<node>g[300005];
int N,M,L,S,T,a[300005];
void dfs(int x,int y,int z){
if(y==L&&z>=S&&z<=T){a[x]=1;return;}
if(y==L)return;
for(int i=0;i<g[x].size();i++){
dfs(g[x][i].w,y+1,z+g[x][i].x);
}
}
signed main(){
cin>>N>>M>>L>>S>>T;
for(int i=0;i<M;i++){
int u,v,c;
cin>>u>>v>>c;
g[u].push_back({v,c});
}
dfs(1,0,0);
for(int i=1;i<=300000;i++){
if(a[i]==1)cout<<i<<' ';
}
cout<<endl;
}