D 小H和游戏

对于被轰炸城市而言,它的孩子,孩子的孩子,父亲的父亲,父亲及父亲的孩子均受到了影响,暴力更改显然不行,不妨用标记更新,详细见代码。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=750005;
 4 
 5 struct node
 6 {
 7     int to,next;
 8 }edge[maxn<<1];
 9 int head[maxn<<1],cnt,f[maxn];
10 int ans[maxn];//记录父亲或父亲的父亲的影响次数
11 int ant[maxn];//记录对孩子的影响次数
12 int knt[maxn];//距离对孩子的孩子的影响次数
13 
14 void add(int from ,int to)
15 {
16     edge[++cnt].next=head[from];
17     edge[cnt].to=to;
18     head[from]=cnt;
19 }
20 void dfs(int now,int pre)
21 {
22     f[now]=pre;
23     for(int i=head[now];~i;i=edge[i].next){
24         int to=edge[i].to;
25         if(to==pre) continue;
26         dfs(to,now);
27     }
28 }
29 
30 int main()
31 {
32     memset(head,-1,sizeof(head));
33     memset(ans,0,sizeof(ans));
34     int n,q,u,v;
35     scanf("%d%d",&n,&q);
36     for(int i=1;i<n;i++){
37         scanf("%d%d",&u,&v);
38         add(u,v);add(v,u);
39     }
40     dfs(1,0);
41     while(q--){
42         scanf("%d",&u);
43         ans[f[u]]++;ans[f[f[u]]]++;
44         ant[f[u]]++;ant[u]++;
45         knt[u]++;
46         printf("%d\n",ans[u]+ant[f[u]]+knt[f[f[u]]]);
47     }
48     return 0;
49 }
View Code

借鉴自:https://blog.csdn.net/qhq889/article/details/105534903

posted @ 2020-05-09 11:47  古比  阅读(184)  评论(0编辑  收藏  举报