【1053】Path of Equal Weight (30 分)

简介: 【1053】Path of Equal Weight (30 分)【1053】Path of Equal Weight (30 分)
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>  
#include<map>
#include<vector>
#include<queue> 
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 ;//当前和sum超过S,直接返回
  if(sum==S) { //如果当前和sum等于S
    if(Node[index].child.size() !=0) return;//还没有到叶子结点,直接返回
    //到达叶子结点,此时path[]存放了一条完整的路径,输出它
    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]; //结点index的第i的子结点编号
    path[numNode]=child;//将结点child加到路径path末尾
    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); //child为结点id的孩子
    }
    sort(Node[id].child.begin() , Node[id].child.end(),cmp); //排序
  }
  path[0]=0; //路径的第一个结点设置为0号结点
  DFS(0,1,Node[0].weight); //DFS求解
  system("pause"); 
    return 0;   
}
相关文章
|
机器学习/深度学习 存储 C++
【PAT甲级 - C++题解】1053 Path of Equal Weight
【PAT甲级 - C++题解】1053 Path of Equal Weight
83 0
Codeforces Round #747 (Div. 2) D. The Number of Imposters(扩展域并查集 带权并查集)
Codeforces Round #747 (Div. 2) D. The Number of Imposters(扩展域并查集 带权并查集)
113 0
|
前端开发 JavaScript 开发者
L1-032 Left-pad (20 分)
L1-032 Left-pad (20 分)
97 0
|
前端开发 JavaScript 开发者
L1-8 Left-pad (20 分)
根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用*去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是******GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。
119 0
PAT (Advanced Level) Practice - 1053 Path of Equal Weight(30 分)
PAT (Advanced Level) Practice - 1053 Path of Equal Weight(30 分)
128 0
Leetcode-Medium 416. Partition Equal Subset Sum
Leetcode-Medium 416. Partition Equal Subset Sum
124 0
【1060】Are They Equal (25分)
【1060】Are They Equal (25分) 【1060】Are They Equal (25分)
92 0
【1144】The Missing Number (20 分)
【1144】The Missing Number (20 分) 【1144】The Missing Number (20 分)
79 0
【1063】Set Similarity (25 分)
【1063】Set Similarity (25 分) 【1063】Set Similarity (25 分)
98 0