CSU 1869 中南大学网络赛C题 树上最大值
2017-04-15 21:36
267 查看
题目:
现在给你一棵根节点编号为1的树,每个节点上都有对应的权值, 求出树上每一层的最大值。(根节点所在位置视为第一层,由此可推,根节点的儿子是处于第二层,etc)
多组数据读入 第一行输入一个正整数n表示树上有n个节点(n<=100000),下一行输入n个正整数v1,v2....vn表示n个节点上对应的权值(vi<=100000), 再下一行输入n-1个正整数(第i个数字v表示,节点i+1的父亲是v,保证v<i+1)
从树自顶向下输出每一层的最大值是多少,每个值之间用空格隔开,全部输出后末尾换行。
代码:
Description
现在给你一棵根节点编号为1的树,每个节点上都有对应的权值, 求出树上每一层的最大值。(根节点所在位置视为第一层,由此可推,根节点的儿子是处于第二层,etc)
Input
多组数据读入 第一行输入一个正整数n表示树上有n个节点(n<=100000),下一行输入n个正整数v1,v2....vn表示n个节点上对应的权值(vi<=100000), 再下一行输入n-1个正整数(第i个数字v表示,节点i+1的父亲是v,保证v<i+1)
Output
从树自顶向下输出每一层的最大值是多少,每个值之间用空格隔开,全部输出后末尾换行。
Sample Input
6 10 6 8 7 3 2 1 2 1 4 4
Sample Output
10 7 8
代码:
#include<iostream> using namespace std; int deep[100001], x[100001],m[100001]; int main() { int n, p; while (cin >> n) { for (int i = 1; i <= n; i++)scanf("%d", &x[i]); deep[1] = 1; for (int i = 2; i <= n; i++) { cin >> p; deep[i] = deep[p] + 1; } for (int i = 1; i <= n; i++)m[i] = 0; for (int i = 1; i <= n; i++)if (m[deep[i]] < x[i])m[deep[i]] = x[i]; for (int i = 1; i <= n; i++) { if (m[i] == 0)break; cout << m[i] << " "; } cout << endl; } return 0; }
相关文章推荐
- CSU 1867 中南大学网络赛F题 John and Health rate
- CSU 1871 中南大学网络赛E题 简单的数论
- CSU 1866 中南大学网络赛A题 Apache and new sports competition
- CSUOJ 1869 树上最大数
- CSU 1216: 异或最大值(字典树+贪心)
- HDOJ 1869 六度分离 两两之间最短距离的最大值
- csu 1307 最大值最小,
- 树上的动态规划;树的最大独立集;刷表DP,子问题彼此独立没有交集; 无根树转化有根树;
- Hdu 5314 Happy King(求树上多少个点对(u,v)满足u到v的路径上点权值最大值减最小值不大于给定的K)
- Codeforces Round #14 D. Two Paths(求树上两条不相交的路径的乘积最大值)
- CSU 1960:单源最大权路径 (DFS)
- CSU_BMW正式组队纪念赛将于3月4日(周日)在中南大学OJ举行
- vijos 1892 树上的最大匹配问题 树形dp
- 整棵树上节点间的最大距离
- UVA1220树上的dp(最大独立集)
- ACM学习历程—CSU 1216 异或最大值(xor && 贪心 && 字典树)
- Codeforces Round #14 D. Two Paths(求树上两条不相交的路径的乘积最大值)
- 【CSU 1079】树上的查询
- codevs 3287 货车运输(树上倍增,最大生成树)
- CSU - 1529 Equator —— DP 最大连续和子序列