PAT甲级1053 Path of Equal Weight (30 分)(DFS)

Posted ldudxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲级1053 Path of Equal Weight (30 分)(DFS)相关的知识,希望对你有一定的参考价值。

题意:

输入三个正整数N,M,S(N<=100,M<N,S<=2^30)分别代表数的结点个数,非叶子结点个数和需要查询的值,接下来输入N个正整数(<1000)代表每个结点的权重,接下来输入M行,每行包括一个两位数字组成的数代表非叶子结点的编号以及数字x表示它的孩子结点个数,接着输入x个数字表示孩子结点的编号。以非递增序输出从根到叶子结点的路径权重,它们的和等于S。

代码:

#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int w[107];
vector<int>v[107];
int s;
int now;
vector<int>path;
int flag;
int vis[107];
vector<int>ans[107];
int cnt;
int dfs(int x)
path.push_back(w[x]);
now+=w[x];
if(now==s)
if(!vis[x])
ans[++cnt]=path;
path.pop_back();
now-=w[x];
return 0;

else if(now>s)
path.pop_back();
now-=w[x];
return 0;

else
for(auto it:v[x])
dfs(it);
path.pop_back();
now-=w[x];
return 0;

int main()
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n,m;
cin>>n>>m>>s;
for(int i=0;i<n;++i)
cin>>w[i];
for(int i=1;i<=m;++i)
string fa;
cin>>fa;
int f=(fa[0]-‘0‘)*10+fa[1]-‘0‘;
vis[f]=1;
int x;
cin>>x;
string son;
for(int j=1;j<=x;++j)
cin>>son;
int s=(son[0]-‘0‘)*10+son[1]-‘0‘;
v[f].push_back(s);


dfs(0);
sort(ans+1,ans+1+cnt);
for(int i=cnt;i;--i)
if(i<cnt)
cout<<"\n";
cout<<ans[i][0];
for(int j=1;j<ans[i].size();++j)
cout<<" "<<ans[i][j];

return 0;

以上是关于PAT甲级1053 Path of Equal Weight (30 分)(DFS)的主要内容,如果未能解决你的问题,请参考以下文章

PAT1053 Path of Equal Weight(30 分)

PAT甲题题解-1053. Path of Equal Weight (30)-dfs

PAT 1053. Path of Equal Weight

PAT 1053 Path of Equal Weight (30)

PAT 1053. Path of Equal Weight (30)

PAT Advanced Level 1053 Path of Equal Weight