#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 110;
int weight[maxn];
int n; //the number of nodes in a tree
int m; //the number of non-leaf nodes
int s; // the given weight number
struct node{
int data;
vector<int> child;
int leaf; //1为叶子节点
}Node[maxn];
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]].data);
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].data);
}
}
bool cmp(int a,int b){
return Node[a].data > Node[b].data;
}
int main(){
int value;
int non_leaf,non_leaf_num;
scanf("%d %d %d",&n,&m,&s);
for(int i=0;i<n;i++){
scanf("%d",&weight[i]);
Node[i].data = weight[i];
Node[i].leaf = 1;//先都设为叶子节点
}
for(int i=0;i<m;i++){
scanf("%d %d",&non_leaf,&non_leaf_num);
Node[non_leaf].leaf = 0;//这些都为非叶子节点
for(int j=0;j<non_leaf_num;j++){
scanf("%d",&value);
Node[non_leaf].child.push_back(value);
}
sort(Node[non_leaf].child.begin(),Node[non_leaf].child.end(),cmp);
}
path[0] = 0;
DFS(0,1,Node[0].data);
}
PAT A1053 Path of Equal Weight
最新推荐文章于 2024-02-24 09:55:05 发布