1053. Path of Equal Weight (30)
来源:互联网 发布:淘宝未发货退款要多久 编辑:程序博客网 时间:2024/05/21 21:33
1053. Path of Equal Weight (30)
时间限制10 ms
内存限制65536 kB
代码长度限制16000 B
判题程序Standard作者CHEN, Yue
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 Figure 1: 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 Figure 1.
Figure 1Input Specification:
Each input file contains one test case. Each case starts with a line containing 0 < N <= 100, the number of nodes in a tree, M (< N), the number of non-leaf nodes, and 0 < S < 230, the given weight number. The next line contains N positive numbers where Wi (<1000) 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 {A1, A2, ..., An} is said to be greater than sequence {B1, B2, ..., Bm} if there exists 1 <= k < min{n, m} such that Ai = Bifor i=1, ... k, 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
N个结点,M个非叶节点,和为weight
N个结点,每个结点的值一行;
接下来M行非叶节点编号
这个编号有几个子结点,接着几个子结点的编号
要求满足从root头到尾的总值为weight;当有多条时,按照同一水平的,值大的在前面
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 Figure 1: 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 Figure 1.
Figure 1
Input Specification:
Each input file contains one test case. Each case starts with a line containing 0 < N <= 100, the number of nodes in a tree, M (< N), the number of non-leaf nodes, and 0 < S < 230, the given weight number. The next line contains N positive numbers where Wi (<1000) 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 {A1, A2, ..., An} is said to be greater than sequence {B1, B2, ..., Bm} if there exists 1 <= k < min{n, m} such that Ai = Bifor i=1, ... k, 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 19Sample Output:
10 5 2 710 4 1010 3 3 6 210 3 3 6 2
N个结点,M个非叶节点,和为weight
N个结点,每个结点的值一行;
接下来M行非叶节点编号
这个编号有几个子结点,接着几个子结点的编号
要求满足从root头到尾的总值为weight;当有多条时,按照同一水平的,值大的在前面
评测结果
测试点
#include<iostream> #include<vector> #include<algorithm> using namespace std; class ROOTCMP{private: vector<int>*weight;public: ROOTCMP(vector<int>*wi):weight(wi){} bool operator()(const int &A, const int&B) { return (*weight)[A] >(*weight)[B]; }};int DuQUReadln(vector<int>*wi, vector<vector<int>>*nodes, int N, int M, vector<bool>*Noroot){ int index,temp; for (index = 0; index < N; index++) cin >> (*wi)[index]; while (M--) { cin >> index >> N; while (N--) { cin >> temp; (*Noroot)[temp] = true; (*nodes)[index].push_back(temp); } sort((*nodes)[index].begin(), (*nodes)[index].end(), ROOTCMP(wi)); } for (index = 0; index < N&&(*Noroot)[index]; index++); return index;}void PATHrootDFS(vector<int>*wi, vector<vector<int>>*nodes, vector<int>*path, int Root, int countweight, int weight){ int newroot; (*path).push_back((*wi)[Root]); vector<int>::iterator iter = (*nodes)[Root].begin(); while (iter != (*nodes)[Root].end()) { newroot = (*iter); if ((*nodes)[newroot].size() != 0) { PATHrootDFS(wi, nodes, path, newroot, countweight + (*wi)[newroot], weight); (*path).pop_back(); } else if (countweight + (*wi)[newroot] == weight) { for (vector<int>::iterator b = (*path).begin(); b < (*path).end(); b++) { cout << (*b) << " "; } cout <<(*wi)[ newroot] << endl; } iter++; }}int main(){ int N, M,weight,Root; cin >> N >> M >> weight; vector<int>wi(N); vector<vector<int>>nodes(N); vector<bool>Noroot(N, false); vector<int>path; Root=DuQUReadln(&wi, &nodes, N, M, &Noroot); if (wi[Root] == weight)cout << weight << endl; else PATHrootDFS(&wi, &nodes, &path, Root, wi[Root], weight); system("pause"); return 0;}
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)-PAT
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- PAT 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- PAT 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- PAT 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 1053. Path of Equal Weight (30)
- 每日一记之选择城市的三级联动使用的是wheel组件
- R中循环框中改变循环变量
- Routes RoutesMiddleware
- Webob WSGI 装饰器
- 听课练习(八)
- 1053. Path of Equal Weight (30)
- HDU 5372 Segment Game(线段树+离散化)
- 利用Virtual Box安装Win10
- nfs挂在内核或U-boot出错TT***ERROR:Cannotumount
- 【实例】html5-canvas通过鼠标绘制线段
- 大阅兵大实力 TCL H8800助力阅兵前线指挥车
- 【C/S】——面向对象的程序设计概念理解
- Activity界面跳转及其生命周期
- C++ 控制台版 2048小游戏