Codeforces 337D Book of evil
一道树形dp,写出来是因为最近也做了道类似的.这题是看了分析的思路才做出来的,但感觉很多这样的dp都是利用类似的性质.像这题的话distDown很好想,但distUp的时候就很难想了,其实只要抓住distUp的必然经过父结点或者它的兄弟经过父结点,这周二的多校的那道也是类似的.但是要在线性时间里求出兄弟结点的时候就要注意,我们不可能遍历这个点的所有兄弟结点,所以好的办法就是存最大的两个,当该点是最大的,就用次大的算,其余的都用最大的算.多校的那个也是类似的,不过要存最大,次大,次次大,是有点麻烦.下面贴一记代码初始化为负无穷有点麻烦的样子- -0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define maxn 100000
using namespace std; int distUp[maxn+];
int distDown[maxn+];
int dp[maxn+][];
int vis[maxn+];
vector<int> G[maxn+];
int n,m,d; void dfs1(int u)
{
vis[u]=;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(vis[v]) continue;
vis[v]=;
dfs1(v);
if(distDown[v]+>dp[u][]){
dp[u][]=distDown[v]+;
if(dp[u][]>dp[u][]){
swap(dp[u][],dp[u][]);
}
}
}
distDown[u]=max(distDown[u],dp[u][]);
} void dfs2(int u)
{
vis[u]=;
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(vis[v]) continue;
if(distDown[v]+==dp[u][]){
distUp[v]=max(max(dp[u][]+,distUp[v]),distUp[u]+);
}
else{
distUp[v]=max(max(dp[u][]+,distUp[v]),distUp[u]+);
}
dfs2(v);
}
} void init(int n)
{
for(int i=;i<=n;i++){
G[i].clear();
}
memset(mark,,sizeof(mark));
fill(distUp,distUp+n+,-0x3fffffff);
fill(distDown,distDown+n+,-0x3fffffff);
for(int i=;i<=n;i++){
dp[i][]=-0x3fffffff;dp[i][]=-0x3fffffff;
}
} int main()
{
while(cin>>n>>m>>d)
{
init(n);
int tmp;
for(int i=;i<m;i++){
scanf("%d",&tmp);
distDown[tmp]=;
distUp[tmp]=;
}
int tu,tv;
for(int i=;i<n-;i++){
scanf("%d%d",&tu,&tv);
G[tu].push_back(tv);
G[tv].push_back(tu);
}
memset(vis,,sizeof(vis));dfs1();
memset(vis,,sizeof(vis));dfs2();
int ans=;
for(int i=;i<=n;i++){
if(distUp[i]<=d&&distDown[i]<=d){
ans++;
}
}
printf("%d\n",ans);
}
return ;
}
Codeforces 337D Book of evil的更多相关文章
- codeforces 337D Book of Evil (树形dp)
题目链接:http://codeforces.com/problemset/problem/337/D 参考博客:http://www.cnblogs.com/chanme/p/3265913 题目大 ...
- codeforces 337D Book of Evil(dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Book of Evil Paladin Manao caught the tra ...
- Codeforces 337D Book of Evil:树的直径【结论】
题目链接:http://codeforces.com/problemset/problem/337/D 题意: 给你一棵树,n个节点. 如果一个节点处放着“罪恶之书”,那么它会影响周围距离不超过d的所 ...
- codeforces 337D 树形DP Book of Evil
原题直通车:codeforces 337D Book of Evil 题意:一棵n个结点的树上可能存在一个Evil,Evil危险范围为d,即当某个点与它的距离x<=d时,那么x是危险的. 现已知 ...
- CF 337D Book of Evil 树形DP 好题
Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area contains n se ...
- codeforce 337D Book of Evil ----树形DP&bfs&树的直径
比较经典的老题 题目意思:给你一颗节点数为n的树,然后其中m个特殊点,再给你一个值d,问你在树中有多少个点到这m个点的距离都不大于d. 这题的写法有点像树的直径求法,先随便选择一个点(姑且设为点1)来 ...
- Codeforces 337D
题意略. 思路: 本题着重考察树的直径.如果我们将这些标记点相连,将会得到大树中的一个子树.我之前只知道树内的点到直径上两端点的距离是最远的,其实,在 整个大树中,这个性质同样适用,也即大树上任意一点 ...
- CodeForces - 337D 树形dp
题意:一颗树上有且仅有一只恶魔,恶魔会污染距离它小于等于d的点,现在已经知道被污染的m个点,问恶魔在的可能结点的数量. 容易想到,要是一个点到(距离最远的两个点)的距离都小于等于d,那么这个点就有可能 ...
- 【转载】ACM总结——dp专辑
感谢博主—— http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 动态规划一 ...
随机推荐
- ArcGIS10中matplotlib画图时的中文设置
利用GIS的数据批量生成XY的图形图像文件,可以直接使用Python.一般大家都是用matplotlib,中文设置的问题参看了许多内容,结论是对错不一,让我折腾了三天,现总结如下: 1.软件的版本.安 ...
- H.264的一些资料整理
本文转载自 http://blog.csdn.net/ljzcom/article/details/7258978, 如有需要,请移步查看. Technorati 标签: H.264 资料整理 --- ...
- iPhone的全球之旅 读书笔记
最近在看<一只iPhone的全球之旅>,文章主要从iPhone供应链角度入手,从各个方面来详细剖析了iPhone这一智能手机领头羊的生产过程. 苹果iPhone手机 ...
- 网络A、B、C类IP地址的区别
学网络之前得先要明白几个概念:(起初我也不怎么知道后来就慢慢会了) 1字节=8位,1位就是1个数字,所以1字节等于8个数字. 2的8次方,和二进制11111111转换为十进制并不一回事. 0-127是 ...
- 《Apache之访问本地用户家目录》——RHEL6.3
首先保证这个本地用户是系统上有的. 1.安装httpd软件包: Yum install httpd 2.启动apache服务: 3.配置用户的家目录: 4.打开apache访问家目录的权限: 5.配置 ...
- 【全面解析DeepZoom 之三】建立DeepZoom应用
文章出处:http://www.cnblogs.com/zhouyinhui/archive/2008/04/14/1153371.html (周银辉) 与导出整图不一样,你不能这样使用: <M ...
- 单元测试SimpleTest新手入门
最近学习单元测试,先用了下PHPunit,结果安装问题一大堆,于是立刻放弃改试simpletest,感觉简单多了.下面列出步骤. 1.下载simpletest(版本1.1.0), http://www ...
- 《PHP和MySQL Web开发》精彩的地方收录
1.用SESSION来做的购物车,做成数组,用isbn对应书的数量作为二维数组保存 $new GET传值加入购物车,submit是修改数量,提交后的表单,通过历遍原来的数组,对应isbn修改最新的数量 ...
- How to understand ReferenceGroup control on Form[AX2012]
在AX2012的Form开发中,微软引入了新的控件ReferenceGroup,它用在Lookup其他表RecId的时候显示更人性化的字段,它的使用还必须从表的索引说起.AX2012的表有这些索引(h ...
- PAT IO-04 混合类型数据格式化输入(5)
/* *PAT IO-04 混合类型数据格式化输入(5) *2015-08-01 作者:flx413 */ #include<stdio.h> int main() { int a; fl ...