【BZOJ2525】[Poi2011]Dynamite(二分,树形dp)
【BZOJ2525】[Poi2011]Dynamite
Description
某个点上的引线被点燃后的1单位时间内,在树上和它相邻的点的引线会被点燃。如果一个有炸.药的点的引信被点燃,那么这个点上的炸.药会爆炸。
求引爆所有炸.药的最短时间。
输入:
第一行是两个整数N,M。(1<=m<=n<=300000)
接下来一行有N个整数Di,第I个数为1表示该点有炸.药。
接下来N-1行每行有两个数A,B,表示A和B之间有一条边。
输出:
最短时间。
样例解释:
点燃3,5上的引线。
Sample Input
1 0 1 1 0 1 1
1 3
2 3
3 4
4 5
5 6
5 7
Sample Output
/*
二分答案。
然后接下来从下往上扫整棵树。
节点的状态有:
第一种 子树内没有不被覆盖的关键点,并且子树中有一个节点的贡献可以继续往上。
第二种 子树内有不被覆盖的关键点,子树中没有节点的贡献可以继续往上。
第三种 既没有 不被覆盖的关键点,又没有 可以继续往上贡献的点。
第四种 都有。
但是 可以证明,第四种情况存在的话,显然可以在子树外挑一个点来覆盖没有被覆盖的关键点,但是这个时候子树内的挑选的点就没有卵用了,所以这种情况可以归到第三种。
然后具体就是贪心讨论的过程了。
贪心的思想就是,能不染就不染
显然第一种需要记录还能往上走多少。
第二种需要记录最远的不被覆盖的关键点到达目前的根节点的距离
*/ #include<iostream>
#include<cstdio> #define N 300007 using namespace std;
int n,m,h[N],cnt,d[N],sum,sm,mx[N],mn[N];
struct edge
{
int ne,to;
}e[N<<]; inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void add(int u,int v)
{
e[++cnt].to=v;e[cnt].ne=h[u];h[u]=cnt;
} void dfs(int u,int fa,int w)
{
mx[u]=-1e9,mn[u]=1e9;
for(int i=h[u];i;i=e[i].ne)
if(e[i].to!=fa)
{
dfs(e[i].to,u,w);
mx[u]=max(mx[u],mx[e[i].to]+);
mn[u]=min(mn[u],mn[e[i].to]+);
}
if(d[u]&&mn[u]>w) mx[u]=max(mx[u],);
if(mx[u]+mn[u]<=w)mx[u]=-1e9;
if(mx[u]==w) sm++,mx[u]=-1e9,mn[u]=;
} bool ok(int w)
{
sm=;dfs(,,w);
return sm+(mx[]>=)<=m;
} int main()
{
n=read(),m=read();
for(int i=;i<=n;i++)
d[i]=read(),sum+=d[i];
for(int i=;i<n;i++)
{
int x=read(),y=read();
add(x,y),add(y,x);
}
if(sum<=m)
{
puts("");return ;
}
int l=,r=n,ans=n;
while(l<=r)
{
int mid=(l+r)>>;
if(ok(mid)) r=mid-,ans=mid;
else l=mid+;
}
printf("%d\n",ans);
return ;
}
【BZOJ2525】[Poi2011]Dynamite(二分,树形dp)的更多相关文章
- 【BZOJ2525】[Poi2011]Dynamite 二分+树形DP
[BZOJ2525][Poi2011]Dynamite Description Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了炸.药,现在需要点燃M个点上的引线引爆所有 ...
- bzoj 2525 [Poi2011]Dynamite 二分+树形dp
[Poi2011]Dynamite Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 270 Solved: 138[Submit][Status][D ...
- 【bzoj5174】[Jsoi2013]哈利波特与死亡圣器 二分+树形dp
题目描述 给你一棵以1为根的有根树,初始除了1号点为黑色外其余点均为白色.Bob初始在1号点.每次Alice将其中至多k个点染黑,然后Bob移动到任意一个相邻节点,重复这个过程.求最小的k,使得无论B ...
- 【题解】hdu 3586 Information Disturbing 二分 树形dp
题目描述 Information DisturbingTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java ...
- HDU 3586 Information Disturbing(二分+树形dp)
http://acm.split.hdu.edu.cn/showproblem.php?pid=3586 题意: 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超 ...
- HDU 5682 zxa and leaf 二分 树形dp
zxa and leaf 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5682 Description zxa have an unrooted t ...
- Codeforces 627D Preorder Test(二分+树形DP)
题意:给出一棵无根树,每个节点有一个权值,现在要让dfs序的前k个结点的最小值最大,求出这个值. 考虑二分答案,把>=答案的点标记为1,<答案的点标记为0,现在的任务时使得dfs序的前k个 ...
- bzoj 2067: [Poi2004]SZN【贪心+二分+树形dp】
第一问就是Σ(deg[u]-1)/2+1 第二问是二分,判断的时候考虑第一问的贪心规则,对于奇度数的点,两两配对之后一条延伸到上面:对于欧度数的点,两两配对或者deg[u]-2的点配对,然后一条断在这 ...
- BZOJ2525 [Poi2011]Dynamite 【二分 + 贪心】
题目链接 BZOJ2525 题解 就是要求所有有炸弹的点到点燃点距离最大值最小 显然二分答案距离\(D\) 然后按深度排序,贪心点燃当前没覆盖的深度最深的点往上第\(D\)层的点 每覆盖一个点要标记其 ...
随机推荐
- WebLoad 解析服务器返回的XML格式内容
Parsing the XML Response get the root node: var rootNode = document.wlXmls[0].XMLDocument.documentE ...
- 【转】Java的path,classpath,java_home环境变量的配置与具体含义
对于一个Java初学者来说,第一步要做的是安装jdk并配置环境变量,一般按照书上或者网上的步骤,一步步照着做就行了,但是对于初学者来说,很多问题没有解决,比如为什么很多配置方法各不相同,却都能够配置成 ...
- Redis 命令与连接【十一】
---------------------Redis 命令--------------- Redis 命令用于在 redis 服务上执行操作. 要在 redis 服务上执行命令需要一个 redis 客 ...
- msp430入门编程11
msp430中C语言的模块化头文件及实现11 msp430中C语言的模块化头文件及库文件12 msp430入门学习 msp430入门编程
- msp430入门学习23
msp430的ADC(模数转换) msp430入门学习
- ssh forwarding 配置
假设有服务器A,属于某一内网,无法直接登录. A: 10.0.1.48 root/password@a 但我们有一台跳板机器可以访问该Server A B: 10.0.2.48 root/passwo ...
- 我的arcgis培训照片9
来自:http://www.cioiot.com/successview-547-1.html
- Base Conversion In PHP and javascript
http://www.exploringbinary.com/base-conversion-in-php-using-built-in-functions/ http://www.binarycon ...
- PowerDesinger15设置字体大小
使用PowerDesigner时,它默认table的字体大小颜色等很难看: 假设通过 Symbol ---> Format进行设置.仅仅能对选中的最改动,新建的Table无效. 能够通过例如以下 ...
- 使用OpenCV读、操作、写图像并与bash合作对某个文件夹下全部图像进行相似处理
我门要对某个文件夹下全部图像文件进行统一处理,假设图像的数量过多.那么手动地一张张处理就会显得有些麻烦.本文使用OpenCV和bash来完毕我们指定的任务. 任务 将文件夹A下的全部统一格式的jpg图 ...