CSU 1869 中南大學網路賽C題 樹上最大值
阿新 • • 發佈:2019-02-07
題目:
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;
}