查看结果

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位, 快去把思路 分享给大家 吧!