题解:

先利用dfs找出各个节点之间的关系。然后利用一个sum[i][j] 数组  sum[i][0] 表示i这个节点收到影响的次数 sum[i][1]表示i这个节点的儿子们收到影响的次数 sum[i][2]表示i的孙子们受到影响的次数,那么我们

可以用sum[f[f[x]]][2]+sum[f[x]][1]+sum[x][0] 表示x这个点被炸的次数,当要轰炸x的时候,
        sum[f[f[x]]][0]++; // grafa
sum[f[x]][0]++;// fa
sum[f[x]][1]++; // x以及x的兄弟们
sum[x][1]++;// son
sum[x][2]++; //
便可以覆盖所有的情况
#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int n,q;
int f[];
int sum[][];
vector<int> edge[]; void dfs(int pos,int fa)
{
int len=edge[pos].size();//
f[pos]=fa;
for(int i=;i<len;i++)
{
int next = edge[pos][i];
if(next!=fa)
{
dfs(next,pos);
}
}
} int main()
{
cin>>n>>q;
for(int i=;i<n;i++) edge[i].clear();
for(int i=;i<n;i++)
{
int x,y;
scanf("%d %d",&x,&y);
edge[x].push_back(y);
edge[y].push_back(x);
}
dfs(,);
memset(sum,,sizeof(sum));
f[]=;
f[]=;
while(q--)
{
int x;
cin>>x;
sum[f[f[x]]][]++;
sum[f[x]][]++;
sum[f[x]][]++; // sum[x][0]++ 这么写是错的是因为漏掉了他的兄弟们。。。
sum[x][]++;
sum[x][]++;
cout<<sum[f[f[x]]][]+sum[f[x]][]+sum[x][]<<endl;
}
return ;
}

最新文章

  1. SQL server2008-对象资源管理器
  2. 8天掌握EF的Code First开发系列之3 管理数据库创建,填充种子数据以及LINQ操作详解
  3. IBatis 简易框架搭建
  4. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
  5. Java编程设计2
  6. JS点击任意标签获得该标签属性,以获得ID为例,以及AJAX的异步原理和 $(document).ready()与window.onload加载方法的区别
  7. [转]网站优化-IIS7下静态文件的优化
  8. pop动画大全 只能时代程序员更应该关心效果而不是冷冰冰的代码
  9. java获取远程网络图片文件流、压缩保存到本地
  10. python operator模块
  11. oschina Web应用开发
  12. 使用VS2010命令提示窗口操作程序集强命名
  13. split()方法
  14. FAT文件系统学习和思考
  15. SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute
  16. sax
  17. Docker使用docker-compose.yml构建Asp.Net Core和Mysql镜像并与Mysql数据库通信
  18. web中的——作者也不知道这里面写的啥
  19. PHP算法排序之快速排序、冒泡排序、选择排序、插入排序性能对比
  20. windows删除文件或目录CMD命令

热门文章

  1. CMU Advanced DB System - Query Optimizer
  2. MQ消息机制如何确认消费了消息?
  3. gdbhooks 栈信息
  4. H5网站接入支付宝的支付接口
  5. Tomcat redis session manager connect redis show: ERR Client sent AUTH, but no password is set
  6. python for test
  7. Dart 中常用的数组操作方法总结
  8. python多线程中join()的理解
  9. 虚拟机设置静态ip【实测中标麒麟】
  10. QML随机颜色