博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT甲级——A1053 Path of Equal Weight
阅读量:4541 次
发布时间:2019-06-08

本文共 3295 字,大约阅读时间需要 10 分钟。

Given a non-empty tree with root R, and with weight Wi​​ assigned to each tree node Ti​​. The weight of a path from R to L is defined to be the sum of the weights of all the nodes along the path from R to any leaf node L.

Now given any weighted tree, you are supposed to find all the paths with their weights equal to a given number. For example, let's consider the tree showed in the following figure: for each node, the upper number is the node ID which is a two-digit number, and the lower number is the weight of that node. Suppose that the given number is 24, then there exists 4 different paths which have the same given weight: {10 5 2 7}, {10 4 10}, {10 3 3 6 2} and {10 3 3 6 2}, which correspond to the red edges in the figure.

Input Specification:

Each input file contains one test case. Each case starts with a line containing 0, the number of nodes in a tree, M (<), the number of non-leaf nodes, and 0, the given weight number. The next line contains N positive numbers where Wi​​ (<) corresponds to the tree node Ti​​. Then M lines follow, each in the format:

ID K ID[1] ID[2] ... ID[K]

where ID is a two-digit number representing a given non-leaf node, K is the number of its children, followed by a sequence of two-digit ID's of its children. For the sake of simplicity, let us fix the root ID to be 00.

Output Specification:

For each test case, print all the paths with weight S in non-increasing order. Each path occupies a line with printed weights from the root to the leaf in order. All the numbers must be separated by a space with no extra space at the end of the line.

Note: sequence { is said to be greater than sequence { if there exists 1 such that Ai​​=Bi​​ for ,, and Ak+1​​>Bk+1​​.

Sample Input:

20 9 2410 2 4 3 5 10 2 18 9 7 2 2 1 3 12 1 8 6 2 200 4 01 02 03 0402 1 0504 2 06 0703 3 11 12 1306 1 0907 2 08 1016 1 1513 3 14 16 1717 2 18 19

Sample Output:

10 5 2 710 4 1010 3 3 6 210 3 3 6 2 深度遍历
1 #include 
2 #include
3 #include
4 using namespace std; 5 struct Node 6 { 7 int val; 8 vector
child; 9 }node[101];10 int N, M, S;11 int path[101];12 void DFS(int head, int numNode, int sum)13 {14 if (sum > S)15 return;16 if (sum == S)17 {18 if (node[head].child.size() != 0)//不是叶子节点19 return;20 for (int i = 0; i < numNode; ++i)21 cout << node[path[i]].val << (i < numNode - 1 ? " " : "");22 cout << endl;23 return;24 }25 for (int i = 0; i < node[head].child.size(); ++i)26 {27 path[numNode] = node[head].child[i];28 DFS(node[head].child[i], numNode + 1, sum + node[node[head].child[i]].val);29 }30 }31 int main()32 {33 cin >> N >> M >> S;34 for (int i = 0; i < N; ++i)35 cin >> node[i].val;36 int a, b, k;37 for (int i = 0; i < M; ++i)38 {39 cin >> a >> k;40 for (int j = 0; j < k; ++j)41 {42 cin >> b;43 node[a].child.push_back(b);44 }45 sort(node[a].child.begin(), node[a].child.end(),46 [](int a, int b) {
return node[a].val > node[b].val; });47 }48 path[0] = 0;49 DFS(0, 1, node[0].val);50 return 0;51 }

 

转载于:https://www.cnblogs.com/zzw1024/p/11285643.html

你可能感兴趣的文章
磁盘空间不足引起的报错
查看>>
流的方式预览文件
查看>>
NOIP2017Day2题解
查看>>
session
查看>>
移动端手势识别
查看>>
Python文档学习笔记(3)--流程控制语句 (1)
查看>>
Http 请求
查看>>
发现问题,解决问题
查看>>
css实现相册方式展现的字母表
查看>>
可跟随鼠标实现立体翻转的JS图片展示效果
查看>>
学编程的鸡汤
查看>>
读取一行多个字符串的方法
查看>>
Appium环境搭建——安卓模拟器(AVD)调试 1-创建模拟器失败点的总结
查看>>
System
查看>>
uiautomator特殊场景
查看>>
Monkey 启动原理分析
查看>>
go ---时间戳和Time类型的相互转化
查看>>
Tries前缀树
查看>>
TOJ4439微积分――曲线积分(数学,模拟)
查看>>
【学习中】Unity Schedule
查看>>