记录编号 |
351511 |
评测结果 |
AAAATTTTTT |
题目名称 |
新型武器 |
最终得分 |
40 |
用户昵称 |
Extreme°/极致 ° |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
6.014 s |
提交时间 |
2016-11-16 16:53:10 |
内存使用 |
6.37 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define N 300001
int n,q,w[N],ans;
vector<int>g[N];
vector<int>son[N];
int d[N],f[N];
void dfsinit(int cur,int fa,int di)
{
d[cur]=di;f[cur]=fa;
for(int i=0;i<g[cur].size();i++)
{
int t=g[cur][i];
if(t!=fa)
{
son[cur].push_back(t);
dfsinit(t,cur,di+1);
}
}
}
void dfs(int u,int cur,int c)
{
if(d[cur]-d[u]==c)
{
ans+=w[cur];
return;
}
for(int i=0;i<son[cur].size();i++)
dfs(u,son[cur][i],c);
}
int work()
{
freopen("newweapon.in","r",stdin);
freopen("newweapon.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&w[i]);
int t1,t2,t3;
for(int i=1;i<=n-1;i++)
{
scanf("%d%d",&t1,&t2);
g[t1].push_back(t2);
g[t2].push_back(t1);
}
dfsinit(1,1,0);
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
if(t1==1)
w[t2]=t3;
else
{
ans=0;
dfs(t2,t2,t3);
printf("%d\n",ans);
}
}
return 0;
}
int heh=work();
int main(){;}