比赛 |
20161116 |
评测结果 |
AAAATTTTTT |
题目名称 |
新型武器 |
最终得分 |
40 |
用户昵称 |
Tabing010102 |
运行时间 |
6.020 s |
代码语言 |
C++ |
内存使用 |
4.88 MiB |
提交时间 |
2016-11-16 11:10:15 |
显示代码纯文本
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 300000+10;
FILE *fin, *fout;
struct Node {
int val;
vector<int> sons;
Node() { val=-1; sons.clear(); }
}d[maxn];
int n, q;
void swap(int &a, int &b) { int t=a; a=b; b=t; }
int _limit, _sum;
void dfs(int now, int dep) {
if(dep == _limit) {
_sum += d[now].val;
} else {
for(int i = 0; i < d[now].sons.size(); i++)
dfs(d[now].sons[i], dep+1);
}
}
int main() {
fin = fopen("newweapon.in", "r");
fout = fopen("newweapon.out", "w");
fscanf(fin, "%d", &n);
for(int i = 1; i <= n; i++) fscanf(fin, "%d", &d[i].val);
for(int i = 1; i <= n-1; i++) {
int a, b;
fscanf(fin, "%d%d", &a, &b);
if(a > b) swap(a, b);
d[a].sons.push_back(b);
}
fscanf(fin, "%d", &q);
for(int i = 1; i <= q; i++) {
int op, u, v;
fscanf(fin, "%d%d%d", &op, &u, &v);
if(op == 1) d[u].val = v;
else {
_limit = v; _sum = 0;
dfs(u, 0);
fprintf(fout, "%d\n", _sum);
}
}
return 0;
}