CF337D-Book of Evil
题目
一棵树上有一个古籍,这个古籍可以影响到与它距离为 \(d\) 以内的点。现在给出被影响到的点,问古籍可能在多少个点上。
\(0\le m,d\le n\le 10^5\)。
分析
原问题不好做,把问题转化为求每个点距离最远的古籍的距离,最后统计有多少个符合要求的。
这是一个树形dp的经典问题,于是就在cf上WA了三次……
做法是分两次求出一个点距离子树中最远的点,以及子树外最远的点。
WA的原因是没有考虑好哪些点不存在下面和子树外的点,导致统计出现问题。以后这种题要把数组初始化为-1,每次转移都要判断一下。
代码
#include<cstdio>
#include<cctype>
#include<vector>
#include<algorithm>
using namespace std;
int read() {
int x=0,f=1;
char c=getchar();
for (;!isdigit(c);c=getchar()) if (c=='-') f=-1;
for (;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const int maxn=1e5+1;
bool spe[maxn];
vector<int> g[maxn];
inline void add(int x,int y) {g[x].push_back(y);}
inline void Max(int &x,int y) {x=max(x,y);}
int down[maxn],up[maxn];
void Down(int x,int fa) {
int &dw=down[x]=spe[x]?0:-1;
for (int v:g[x]) if (v!=fa) {
Down(v,x);
if (spe[v]) Max(dw,1);
if (~down[v]) Max(dw,down[v]+1);
}
}
void Up(int x,int fa) {
pair<int,int> fir(-1,0),sec(-1,0);
for (int v:g[x]) if (v!=fa) {
if (down[v]>fir.first) swap(fir,sec),fir=make_pair(down[v],v); else if (down[v]>sec.first) sec=make_pair(down[v],v);
}
for (int v:g[x]) if (v!=fa) {
int &uv=up[v]=-1;
if (v!=fir.second && ~fir.first) uv=fir.first+2; else if (~sec.first) uv=sec.first+2;
if (spe[x]) Max(uv,1);
if (~up[x]) Max(uv,up[x]+1);
Up(v,x);
}
}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
int n=read(),m=read(),k=read();
for (int i=1;i<=m;++i) spe[read()]=true;
for (int i=1;i<n;++i) {
int x=read(),y=read();
add(x,y),add(y,x);
}
Down(1,1);
up[1]=-1;
Up(1,1);
int ans=0;
for (int i=1;i<=n;++i) ans+=(max(up[i],down[i])<=k);
printf("%d\n",ans);
return 0;
}
CF337D-Book of Evil的更多相关文章
- CF337D Book of Evil - 树型dp
传送门 题目大意: 一棵树上有一个特殊点,特殊点可以影响距离小于等于d的点,现在告诉被影响的点,问特殊点可以在几个点上. 题目分析: 对题意进行转化:求到被影响点的最大距离小于等于d的点数目. 然后就 ...
- code forces 383 Arpa's loud Owf and Mehrdad's evil plan(有向图最小环)
Arpa's loud Owf and Mehrdad's evil plan time limit per test 1 second memory limit per test 256 megab ...
- C#Light/Evil合体啦
决定将C#Light和C#Evil合并成一个项目,毕竟C#Evil包含C#Light所有的功能,分开两个,基本的表达式方面有什么bug还得两头改 暂时就C#Light/Evil这么叫吧,庆祝合体,画了 ...
- C#最良心脚本语言C#Light/Evil,Xamarin\WP8\Unity热更新最良心方案,再次进化.
C#Light的定位是嵌入式脚本语言,一段C#Light脚本是一个函数 C#Evil定位为书写项目的脚本语言,多脚本文件合作,可以完全用脚本承载项目. C#Light/Evil 使用完全C#一致性语法 ...
- Java unserialize serialized Object(AnnotationInvocationHandler、ysoserial) In readObject() LeadTo InvokerTransformer(Evil MethodName/Args)
Java unserialize serialized Object(AnnotationInvocationHandler.ysoserial) In readObject() LeadTo Tra ...
- 只有文本编辑器才是王道, 什么ide都是evil的浮云, 看看linus linux的内核开发工具vim emacs
只有文本编辑器才是王道, 什么ide都是evil的浮云, 看看linus linux的内核开发工具vim emacs [ide is evil] (http://i.cnblogs.com/EditP ...
- D. Book of Evil
D. Book of Evil time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- Gym 100463D Evil DFS
Evil Time Limit: 5 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Descri ...
- 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 ...
- Codeforces Gym 100463D Evil DFS
Evil Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments Descr ...
随机推荐
- CH03 课下作业
CH03 课下作业 缓冲区溢出漏洞实验 缓冲区溢出攻击:通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,造成程序崩溃或使程序转而执行其它指令,以达到攻击的目的. 缓冲区溢出 ...
- sql中的制表符、换行符、回车符,问题
前一阵子用excel导入资源,使用join时发现匹配项为0赶紧用left join看看情况,发现无法链接表. 后来觉得可能是换行的问题,发现还真是,于是就在数据库里删除不想要的字符了,当然,一定要养成 ...
- python3出现转码问题的总结
对于此(类)问题: (1)出现UnicodeEncodeError –> 说明是Unicode编码时候的问题: (2) ‘gbk’ codec can’t encode character –& ...
- 1722: [Usaco2006 Mar] Milk Team Select 产奶比赛
1722: [Usaco2006 Mar] Milk Team Select 产奶比赛 https://www.lydsy.com/JudgeOnline/problem.php?id=1722 分析 ...
- 【Unity3d】ScriptableObject的简单用法
ScriptableObject非常适合小数量的游戏数值. 使用ScriptableObject的时候需要注意,生成ScriptableObject数据文件需要自己写Editor代码实现. 大概的 ...
- HIS系统患者实体OO设计的一点思考
软件开发的生命周期中,数据库建模后,在某个数据库系统中形成相对应的表,之后再根据数据库模型设计相关的业务对象及其关系.这其实是进行了两次设计,一次是数据库模型设计,数据库模型设计是根据现实业务提取出来 ...
- My status
I haven‘t any one who is strong relationship with me. My skill is normal. I'm not interesting in neg ...
- 强化学习读书笔记 - 09 - on-policy预测的近似方法
强化学习读书笔记 - 09 - on-policy预测的近似方法 参照 Reinforcement Learning: An Introduction, Richard S. Sutton and A ...
- 测试Websocket建立通信,使用protobuf格式交换数据
接到一个应用测试,应用实现主要使用websocket保持长链接,使用protobuf格式交换数据,用途为发送消息,需要我们测试评估性能,初步评估需要测试长链接数.峰值消息数以及长期运行稳定性 整体需求 ...
- 天下武功,无快不破,Python开发必备的6个库
01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python 运行时与实时(JIT)编译器.与使用普通 ...