题意略。

思路:

本题着重考察树的直径。如果我们将这些标记点相连,将会得到大树中的一个子树。我之前只知道树内的点到直径上两端点的距离是最远的,其实,在

整个大树中,这个性质同样适用,也即大树上任意一点,到子树中任意一点的距离,其中距离最远者必为子树直径上的端点。

如果我从子树的端点接入,那子树中的最远点必然是端点;如果我从非端点接入,那我到最远点的距离是   我到非端点的距离 + 非端点所能达到的最远点的距离

也即我到某个端点的距离。

那么我只要看任一个点到子树的两个端点的距离中最大的值,是不是小于等于d,如果是,则有可能存在鬼。

详见代码:

#include<bits/stdc++.h>
#define maxn 100005
using namespace std; int n,m,d;
int dist[][maxn];
int mark[maxn];
vector<int> graph[maxn];
queue<int> que; int bfs(int num,int s){
while(que.size()) que.pop();
dist[num][s] = ;
que.push(s);
int ret = -;
while(que.size()){
int temp = que.front();
que.pop();
for(int i = ;i < graph[temp].size();++i){
int to = graph[temp][i];
if(dist[num][to] != -) continue;
dist[num][to] = dist[num][temp] + ;
if(mark[to]){
if(ret == - || dist[num][ret] < dist[num][to]){
ret = to;
}
}
que.push(to);
}
}
return ret;
} int main(){
scanf("%d%d%d",&n,&m,&d);
for(int i = ;i < m;++i){
int p;
scanf("%d",&p);
mark[p] = ;
}
int u,v;
for(int i = ;i < n - ;++i){
scanf("%d%d",&u,&v);
graph[u].push_back(v);
graph[v].push_back(u);
}
memset(dist,-,sizeof(dist));
int v1 = bfs(,);
int v2 = bfs(,v1);
bfs(,v2);
int cnt = ;
for(int i = ;i <= n;++i){
int d1 = dist[][i],d2 = dist[][i];
if(max(d1,d2) <= d) ++cnt;
}
printf("%d\n",cnt);
return ;
}

Codeforces 337D的更多相关文章

  1. codeforces 337D 树形DP Book of Evil

    原题直通车:codeforces 337D Book of Evil 题意:一棵n个结点的树上可能存在一个Evil,Evil危险范围为d,即当某个点与它的距离x<=d时,那么x是危险的. 现已知 ...

  2. codeforces 337D Book of Evil (树形dp)

    题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...

  3. Codeforces 337D Book of Evil:树的直径【结论】

    题目链接:http://codeforces.com/problemset/problem/337/D 题意: 给你一棵树,n个节点. 如果一个节点处放着“罪恶之书”,那么它会影响周围距离不超过d的所 ...

  4. Codeforces 337D Book of evil

    一道树形dp,写出来是因为最近也做了道类似的.这题是看了分析的思路才做出来的,但感觉很多这样的dp都是利用类似的性质.像这题的话distDown很好想,但distUp的时候就很难想了,其实只要抓住di ...

  5. codeforces 337D Book of Evil(dp)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Book of Evil Paladin Manao caught the tra ...

  6. CodeForces - 337D 树形dp

    题意:一颗树上有且仅有一只恶魔,恶魔会污染距离它小于等于d的点,现在已经知道被污染的m个点,问恶魔在的可能结点的数量. 容易想到,要是一个点到(距离最远的两个点)的距离都小于等于d,那么这个点就有可能 ...

  7. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  8. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  9. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

随机推荐

  1. C语言中的“>>”和“

    先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1; i = i << 2; //把i里的值左移2位 也就是说,1的2进制是00 ...

  2. TP框架基础 (二) ---空控制器和空操作

    通过之前的学习我们知道了index.php是一个入口文件,如果没有这个入口文件的话,我们需要自己创建! [视图模板文件创建] 视图模板文件存放发位置在: 里面没有模板文件 如果我们想要访问Login控 ...

  3. Cobbler-自动化部署神器

    Cobbler-自动化部署神器 前言: 网络安装服务器套件 Cobbler(补鞋匠)从前,我们一直在做装机民工这份很有前途的职业.自打若干年前 Red Hat 推出了 Kickstart,此后我们顿觉 ...

  4. 如何实现Kali linux系统下的U盘启动(小白指导)

    一.准备工作: 声明:这个“操作”并不会影响你原装的系统,真正的即插即用的哦. (1)4GB的U盘<读写速度比较快的> (2)Kali linux镜像文件 (3)软件Universal-U ...

  5. 转 java - 如何判断单链表有环

    转自 https://blog.csdn.net/u010983881/article/details/78896293 1.穷举遍历 首先从头节点开始,依次遍历单链表的每一个节点.每遍历到一个新节点 ...

  6. Flink 灵魂两百问,这谁顶得住?

    Flink 学习 https://github.com/zhisheng17/flink-learning 麻烦路过的各位亲给这个项目点个 star,太不易了,写了这么多,算是对我坚持下来的一种鼓励吧 ...

  7. oracle一条语句插入多个值的方法

    今天在实践过程中遇到一个问题, 我想往数据库插入多条数据时,使用了如下语句: insert into 表1 (字段1,字段2) values (1,2),(2,3),(3,4); 这条语句在mysql ...

  8. 【iOS】[[NSBundle mainBundle] loadNibNamed:nibTitle owner:self options:nil] 异常

    这两天照书上的例子写代码时,出现了这个异常. 上网查了不少,有人说链接失效什么的……但发现都不是那些原因,问题出现在下面这句代码: [[NSBundle mainBundle] loadNibName ...

  9. 解决:django.db.utils.OperationalError: unable to open database file

    这是一个从GitHub上下载的,一个网站项目的源码.想要在自己的电脑上运行,期间过程相当曲折,不过至此终于是完成了. 1.安装过程: python2->virtualenv->django ...

  10. 一文了解:Redis基础类型

    Redis基础类型 Redis特点 开源的,BSD许可高级的key-value存储系统 可以用来存储字符串,哈希结构,链表,集合 安装 windows:https://github.com/micro ...