| Path of Equal Weight (30) |
|---|
提交的代码
提交时间:2020-01-20 17:34:40
语言:C++
ACCEPTED
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=110;
struct Node
{
int weight; //数据域
vector<int> child; //指针域
}node[maxn]; //结点数组
bool cmp(int a,int b)
{
return node[a].weight>node[b].weight; //按结点数据域从大到小排序
}
int n,m,S; //结点数、分支结点数、给定的和
int path[maxn]; //记录路径
//当前访问结点为index,numNode为当前路径path上的结点个数
//sum为当前的结点权值之和
void DFS(int index,int numNode,int sum)
{
if(sum>S) return;
if(sum==S)
{
if(node[index].child.size()!=0) return;
for(int i=0;i<numNode;i++)
{
printf("%d",node[path[i]].weight);
if(i<numNode-1) printf(" ");
else printf("\n");
}
return;
}
for(int i=0;i<node[index].child.size();i++)
{
int child=node[index].child[i];
path[numNode]=child;
DFS(child,numNode+1,sum+node[child].weight);
}
}
int main()
{
scanf("%d%d%d",&n,&m,&S);
for(int i=0;i<n;i++)
{
scanf("%d",&node[i].weight);
}
int id,k,child;
for(int i=0;i<m;i++)
{
scanf("%d%d",&id,&k);
for(int j=0;j<k;j++)
{
scanf("%d",&child);
node[id].child.push_back(child);
}
sort(node[id].child.begin(),node[id].child.end(),cmp);
}
path[0]=0;
DFS(0,1,node[0].weight);
return 0;
}
|
|
恭喜你做对本题!你的代码排在第260位, 快去把思路 分享给大家 吧!
|
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
扫一扫,把题目装进口袋
扫描二维码,进入QQ群
扫描二维码,关注牛客公众号