【题目描述】 巨硬公司是微软公司的竞争对手,今年为了鼓励员工们的积极性决定发放 次奖金,奖金的发放是以部门领导为单位, 巨硬公司的体系为一个领导和若干的该领导的下属,而其下属也可以是其他员工的领导。 巨硬公司的董事会决定,每次选定一个编号为 的领导(已知巨硬公司最大领导的编号为 1 ),给领导及其全部下属发 放奖金。 问经过 次发放后,每个员工(包含领导)最终能够获得多少万的奖励。 【输入格式】 第一行两个数 和 ,意义如题。 接下来 行每行两个正整数 和 ,表示 是 上级 。 再接下来 行每行两个正整数 和 ,表示给编号为 的员工及其全部下属每人发放 万的奖金。 【输出格式】 输出 个数据,以空格隔开,代表的是从编号 至 的员工获得奖金的总数。 输入样例:
4 3
1 2
2 3
2 4
2 10
1 100
3 1
输出样例:
100 110 111 110
#include<bits/stdc++.h>
using namespace std;
int G[10000005];
long long vis[88808888];
int main(){
long long n,q;
cin>>n>>q;
for(long long i=1;i<n;i++){
int a,b;
cin>>a>>b;
G[b]=a;
}
for(int i=1;i<=q;i++){
long long x,k;
cin>>x>>k;
vis[x]+=k;
}
for(int i=1;i<=n;i++){
vis[i]=vis[i]+vis[G[i]];
cout<<vis[i]<<" ";
}
return 0;
}