记录编号 |
351389 |
评测结果 |
AAAATTTTTT |
题目名称 |
新型武器 |
最终得分 |
40 |
用户昵称 |
Tabing010102 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
6.012 s |
提交时间 |
2016-11-16 15:13:04 |
内存使用 |
4.88 MiB |
显示代码纯文本
- #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;
- }