题意略。

思路:

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

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

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

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

那么我只要看任一个点到子树的两个端点的距离中最大的值,是不是小于等于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. linux初学者-DNS配置篇

    linux初学者-DNS配置篇 DNS在之前的网络管理篇已经做过介绍,下文将叙述DNS在学习工作中的一些配置以及应用. 1.高速缓存DNS 一台主机通过DNS服务器询问域名解析IP是需要一定的时间的, ...

  2. 使用jquery删除链接所在的行

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 深入理解Java中的锁(三)

    ReadWriteLock接口 读写锁维护一对关联锁,一个只用于读操作,一个只用于写操作.读锁可以由多个线程同时持有,又称共享锁.写锁同一时间只能由一个线程持有,又称互斥锁.同一时间,两把锁不能被不同 ...

  4. AI中台——智能聊天机器人平台的架构与应用(分享实录)

    内容来源:宜信技术学院第3期技术沙龙-线上直播|AI中台——智能聊天机器人平台 主讲人:宜信科技中心AI中台团队负责人王东 导读:随着“中台”战略的提出,目前宜信中台建设在思想理念及架构设计上都已经取 ...

  5. 解决微信小程序开发者工具输入框焦点问题

    Windows10笔记本上运行微信小程序开发者工具,输入框(input,textarea)没有焦点,只能在真机调试,效率太低.后来发现是Window10对笔记本高分屏支持不好,要DPI缩放,导致兼容性 ...

  6. Where is the clone one and how to extract it?

    One cannot be in two places at once. Do you know what's "Dual Apps"? Manufactures like Xia ...

  7. 向.Net/Unity 程序员推荐一个十分因吹斯听的网站:sharplab.io

    0x00 前言 & 过程 & 结论 今天发现了一个十分有趣的网站: https://sharplab.io/ 网站的页面并不复杂,功能大体上能够在题图中得到概括.发现它的过程也很偶然, ...

  8. hdu 6406 Taotao Picks Apples (线段树)

    Problem Description There is an apple tree in front of Taotao's house. When autumn comes, n apples o ...

  9. Jquery.form异步上传文件常见问题解决

    Jquery.form常用方法我就不多说,主要说一下在使用过程中碰到的问题 1.提示 “xxxx” is not define 或者"xxx" is not a function ...

  10. js 数组对象深拷贝

    js 数组对象深拷贝 结论:对象的拷贝不能采用直接赋值的方式. 背景 踩过的坑如下: formData本来是父组件传过来的,但是我不想直接用,于是我直接赋值给一个formDataCopy的对象. 但是 ...