codeforces 337D Book of Evil(dp)

转载请注明出处: http://www.cnblogs.com/fraud/           ——by fraud

 

Book of Evil

Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area contains n settlements numbered from 1 to n. Moving through the swamp is very difficult, so people tramped exactly n - 1 paths. Each of these paths connects some pair of settlements and is bidirectional. Moreover, it is possible to reach any settlement from any other one by traversing one or several paths.

The distance between two settlements is the minimum number of paths that have to be crossed to get from one settlement to the other one. Manao knows that the Book of Evil has got a damage range d. This means that if the Book of Evil is located in some settlement, its damage (for example, emergence of ghosts and werewolves) affects other settlements at distance d or less from the settlement where the Book resides.

Manao has heard of m settlements affected by the Book of Evil. Their numbers are p1, p2, ..., pm. Note that the Book may be affecting other settlements as well, but this has not been detected yet. Manao wants to determine which settlements may contain the Book. Help him with this difficult task.

Input

The first line contains three space-separated integers n, m and d (1 ≤ m ≤ n ≤ 100000; 0 ≤ d ≤ n - 1). The second line contains m distinct space-separated integers p1, p2, ..., pm (1 ≤ pi ≤ n). Then n - 1 lines follow, each line describes a path made in the area. A path is described by a pair of space-separated integers ai and bi representing the ends of this path.

Output

Print a single number — the number of settlements that may contain the Book of Evil. It is possible that Manao received some controversial information and there is no settlement that may contain the Book. In such case, print 0.

Sample test(s)
Input
6 2 3
1 2
1 5
2 3
3 4
4 5
5 6
Output
3
Note

Sample 1. The damage range of the Book of Evil equals 3 and its effects have been noticed in settlements 1 and 2. Thus, it can be in settlements 3, 4 or 5.

 

题意

给一棵n个结点的树,在树上的某个点上有一本"book of evil",在其周围的与其距离小于等于d的点都会受到其影响,已知m个受到影响的点,求有几个可能会有"book of evil"

 

通过维护一个结点到其子树中的最长距离,以及除去存在最长距离之外,到另外子树的最长距离,然后再dfs一遍即可。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 #include <vector>
 6 using namespace std;
 7 #define MAXN 100010
 8 vector<int>G[MAXN];
 9 int dp[MAXN][2];
10 int pre[MAXN][2];
11 int ans=0;
12 int d;
13 void dfs(int u,int fa){
14     for(int i=0;i<G[u].size();i++){
15         int v=G[u][i];
16         if(v==fa)continue;
17         dfs(v,u);
18         int d1=dp[v][0]+1;
19         if(d1>dp[u][1]){
20             dp[u][1]=d1;
21             pre[u][1]=v;
22             if(dp[u][1]>dp[u][0]){
23                 swap(dp[u][0],dp[u][1]);
24                 swap(pre[u][0],pre[u][1]);
25             }
26         }
27     }
28 }
29 void dfs2(int u,int fa,int dis){
30     if(dis>d)return;
31     if(dp[u][0]<=d)ans++;//cout<<u<<endl;}
32     int d1=max(dp[u][0],dis)+1;
33     int d2=max(dp[u][1],dis)+1;
34     for(int i=0;i<G[u].size();i++)
35     {
36         int v=G[u][i];
37         if(v==fa)continue;
38         if(pre[u][0]==v)dfs2(v,u,d2);
39         else dfs2(v,u,d1);
40     }
41 }
42 int main()
43 {
44     ios::sync_with_stdio(false);
45     //freopen("in.in","r",stdin);
46     int m,n;
47     int u,v;
48     cin>>n>>m>>d;
49     for(int i=0;i<n;i++)dp[i][0]=dp[i][1]=-MAXN;
50     for(int i=0;i<n;i++)pre[i][0]=pre[i][1]=-1;
51     for(int i=0;i<m;i++){
52         cin>>u;
53         u--;
54         dp[u][0]=dp[u][1]=0;
55     }
56     for(int i=0;i<n;i++)G[i].clear();
57     for(int i=0;i<n-1;i++){
58         cin>>u>>v;
59         u--;v--;
60         G[u].push_back(v);
61         G[v].push_back(u);
62     }
63     ans=0;
64     dfs(0,-1);
65     dfs2(0,-1,-MAXN);
66     cout<<ans<<endl;
67     return 0;
68 }
代码君

 

转载于:https://www.cnblogs.com/fraud/p/4338858.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359168.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 如何去滚动条,css怎么去除滚动条?

css可以通过overflow与scroll属性来实现去除滚动条效果。css设置overflow属性为hidden可以实现去除滚动条或设置scroll属性为no。1、这个可以用CSS实现 你可以用JS操作CSS方法一&#xff1a;设置CSS属性overflow为hidden。&#xff1c;body style"overflow:hidden"&a…

阿里云ECS服务器连接不上3306端口?

连不上3306端口一般有三种情况。 1 .本机上防火墙没有开放3306端口,需要自己配置入站规则,或者关闭本机防火墙。 2 .linux 服务器上的 iptables 防火墙没有开放3306端口, 或者关闭服务器上的防火墙。 打开 /etc/sysconfig/iptables 在 "-A INPUT –m state --sta…

UGUI 锚点

今天我们来学习下UGUI的锚点, 他是做什么的呢&#xff1f; 基本上就是用于界面布局. 1. 1个控件对应1个描点. 2. 描点分成四个小叶片, 每1个叶片 对应 控件四边框的角点 3. 不管屏幕如何放大缩小, 控件四边点与 每一个叶片对应的四边点距离不变.(换句话说,按钮的中心与描点的…

语文课外运用计算机探究,[小学语文]计算机在小学写字教学中的运用之我见

[小学语文]计算机在小学写字教学中的运用之我见随着经济的快速发展&#xff0c;教育也出现了加快发展、加快改革的势态。随着教育技术的不断增加&#xff0c;教学设备得以不断更新&#xff0c;教学手段变得更加现代化。特别是我们火星小学&#xff0c;计算机辅助教学已成为学校…

glassfish_具有GlassFish和一致性的高性能JPA –第1部分

glassfish您以前听说过连贯性吗&#xff1f; 可能是。 它是那些著名的内存网格解决方案之一&#xff0c;这些解决方案承诺了出色的快速数据访问和无限空间用于您经常使用的数据。 其中一些众所周知的竞争对手是Infinispan &#xff0c; Memcached和Terracotta Ehcache 。 它们都…

推荐几个开发高薪技术产品(APP、网站、小程序)的原型设计工具

工欲善其事必先利其器。作为一名产品经理&#xff0c;如何才能快速地设计一款产品&#xff1f;一款优秀的产品原型工具必不可少。如何才能选择一款适合自己的原型工具呢&#xff1f;Benson特意整理了11款产品原型工具以供参考&#xff0c;并学习曲线&#xff0c;性价比&#xf…

APP界面常用的五种颜色搭配

众所周知&#xff0c;每一种颜色带给用户的视觉感受也是不同的。现在人们对手机的依赖程度&#xff0c;就能看到手机中APP的发展前景&#xff0c;那今天就跟大家聊聊如何通过颜色搭配的不同来进行移动端APP界面的布局和排版设计。移动端UI界面中通常是需要选取主色&#xff0c;…

JavaOne 2015 –提交的技巧和建议

大家都知道JavaOne 。 感觉就像一直在那儿。 而且&#xff0c;即使我们跌宕起伏&#xff0c;而地理位置也不是我们想要的那样&#xff0c;旧金山也很昂贵&#xff0c;而且和。 这是有关各种Java的顶级会议。 今年又再次成为程序委员会&#xff08;“ Java&#xff0c;DevOps和云…

计算机网络课程计划,计算机网络教学计划2017

计算机网络教学计划2017教学计划(课程计划)是课程设置的整体规划&#xff0c;它规定不同课程类型相互结构的方式&#xff0c;也规定了不同课程在管理学习方式的要求及其所占比例。下面是小编整理的计算机网络教学计划范文&#xff0c;希望对你有帮助!计算机网络教学计划(一)一、…

微信服务商开发能力说明文档

最近看到很多人复制我的这篇文章,我也是醉了,你起码搞个转载,注明出处, 然后设置付费文档,发现也不好使,文章比较简短,别人也能免费看到我的文章全部内容, 无奈之下,再次打开这篇文章开始编辑, 前面增加一些废话, 看看有多少人复制我的文档,我都不想评论,找各…

html中scope的作用,AngularJS 作用域(Scope)

AngularJS 作用域(Scope)作用域(Scope)是一个存储应用数据模型的对象为 表达式 提供了一个执行上下文作用域的层级结构对应于 DOM 树结构作用域可以监听 表达式 的变化并传播事件作用域有什么作用域提供了 ($watch) 方法监听数据模型的变化作用域提供了 ($apply) 方法把不是由A…

跳转到企业缓存之前要考虑的事项

介绍 关系数据库事务是ACID &#xff0c;强大的一致性模型简化了应用程序开发。 由于启用Hibernate缓存是一项配置 &#xff0c;因此&#xff0c;只要数据访问层开始显示性能问题&#xff0c;就转向缓存非常吸引人。 添加缓存层确实可以提高应用程序性能&#xff0c;但是它有其…

(027) Linux之shell分支if语句

十年运维系列之基础篇 - Linux 作者&#xff1a;曾林 联系&#xff1a;1494445739qq.com 网站&#xff1a;www.jplatformx.com 版权&#xff1a;文章未经同意请勿转载 一、使用if语句 通过shell&#xff0c;我们可以来写出这样的一个使用if语句的shell脚本片段。如下所示&…

解锁计算机桌面,电脑锁屏按什么键解锁

按回车键即可解锁。具体的解锁过程如下1、先将电脑设置一个密码&#xff0c;再使用电脑锁屏快捷键将屏幕锁掉&#xff0c;最后按回车键解锁。首先在电脑桌面上点击开始菜单&#xff0c;找到控制面板点击并进入。2、然后在弹出的界面找到“用户账户和家庭安全”&#xff0c;并单…

ppt如何旋转流程图_张伟随笔37:我书写方程式和画流程图的方法

珠海海洋王国里的海象山张伟 2020.11.23我书写方程式和画流程图的方法首发/化学张伟/2020.05.13书写化学方程式&#xff0c;在word里面可以实现一部分&#xff0c;例如&#xff0c;我要书写高锰酸钾受热分解为锰酸钾、二氧化锰和氧气&#xff0c;化学式有上下标&#xff0c;可以…

职业技术人士学习捷径最快的网站

由于最近研究大数据相关的技术及前沿技术,对常用的几个网站做一下分享(包含技术网站+最新资讯网站): 1. 36Kr 网站:https://36kr.com/ 提供创业资讯、科技新闻、投融资对接、股权投资、极速融资等创业服务,致力成为创业者可以依赖的创业服务平台,为创业者提供最好的产品和…

单元测试编写_为什么要编写单元测试-测试技巧8

单元测试编写我对最近的博客“您应该测试什么”有很多React&#xff0c;有些人出于各种原因与我达成一致&#xff0c;另一些人则认为建议某些类可能不需要单元测试是完全危险的。 已经处理了什么测试&#xff0c;今天的博客涉及为什么要编写单元测试&#xff0c;而今天的示例代…

7个顶级资源网站,不知道就很可惜

说起搜索资源&#xff0c;大家肯定先想到百度&#xff0c;的确“度娘”很万能&#xff0c;能帮我们解决很多问题&#xff0c;但毕竟百度资源有限&#xff0c;用的人多了就造成重复的问题&#xff0c;接下来&#xff0c;小编给大家分享7个顶级资源搜索网站&#xff0c;能满足你很…

通过Pax考试对JBoss Fuse 6.x进行集成测试,第一部分

JBoss Fuse是一个功能强大的分布式集成平台&#xff0c;具有内置功能&#xff0c;用于集中集成的微服务部署的集中式配置管理&#xff0c;服务发现&#xff0c;版本控制&#xff0c;API网关&#xff0c;负载平衡&#xff0c;故障转移等。 JBoss Fuse 6.x构建在Fabric8 1.x开源项…

【APICloud系列|3】开发APP对UI的一般性要求

以前用APICloud平台开发过一款APP&#xff0c;已经上线&#xff0c;现在担任CTO对UI普及一下常识。 总结 UI图&#xff1a;640*960、1280*720 图标大小&#xff1a;200*200、64*64 图片的格式&#xff1a;png 底部导航栏&#xff1a;两种图片不同颜色。 说明&#xff1a;