题目描述

给你一棵以1为根的有根树,初始除了1号点为黑色外其余点均为白色。Bob初始在1号点。每次Alice将其中至多k个点染黑,然后Bob移动到任意一个相邻节点,重复这个过程。求最小的k,使得无论Bob怎样移动,经过的节点都是黑色节点。

输入

第一行,包含1个整数,n,表示建筑的数量。
接下来n-1行,每行两个整数u、v(1≤u,v≤n,u≠v),表示建筑u和建筑v之间有一条魔法道路。
数据保证任意两个建筑连通。
1≤n≤300000。

输出

输出一个整数k,表示最少需要派出施用咒语的成员数。

样例输入

7
1 2
1 3
2 5
2 6
7 2
4 1

样例输出

3


题解

二分+树形dp

建议大家读读原题面 = =

读懂题后可以发现:

Bob(伏地魔)的移动路线一定是从根节点到一个叶子节点的一条路径,因为走回头路实在是太傻逼了... 
Alice(凤凰社)只需要每次将每次移动的叶子节点染黑即可,每次一定是优先染叶子节点(因为下一步就要走到),多余的补后面的部分。

答案显然具有单调性,考虑二分答案。

对于二分的 $k=mid$ ,使用树形dp判定:

设 $f[x]$ 表示Bob走到了 $x$ 节点,仅有 $x$ 染黑,需要额外染多少个黑点才能够完成(也就是说之前需要多出多少个剩余操作次数才能够满足条件)。

那么对于 $x$ ,显然 $f[x]=\text{max}(\sum\limits_{fa[y]=x}f[y]+son[x]-mid,0)$ ($son[x]$ 表示 $x$ 的儿子个数),因为子节点需要染黑,每个儿子都需要补全(否则Bob可以选择该儿子)。而这一个点多余的的不能补给路径上之前的点,因此和 $0$ 取 $\text{max}$ 。

如果 $f[1]=0$ ,说明不需要额外补充节点,$mid$ 可行;否则 $mid$ 不可行。

时间复杂度 $O(n\log n)$ 。

#include <cstdio>
#include <algorithm>
#define N 300010
using namespace std;
int head[N] , to[N << 1] , next[N << 1] , cnt , son[N] , f[N] , mid;
inline void add(int x , int y)
{
to[++cnt] = y , next[cnt] = head[x] , head[x] = cnt;
}
void init(int x , int fa)
{
int i;
for(i = head[x] ; i ; i = next[i])
if(to[i] != fa)
son[x] ++ , init(to[i] , x);
}
void dfs(int x , int fa)
{
int i;
f[x] = son[x] - mid;
for(i = head[x] ; i ; i = next[i])
if(to[i] != fa)
dfs(to[i] , x) , f[x] += f[to[i]];
if(f[x] < 0) f[x] = 0;
}
int main()
{
int n , i , x , y , l , r , ans;
scanf("%d" , &n);
for(i = 1 ; i < n ; i ++ ) scanf("%d%d" , &x , &y) , add(x , y) , add(y , x);
init(1 , 0);
l = 0 , r = n;
while(l <= r)
{
mid = (l + r) >> 1 , dfs(1 , 0);
if(f[1] == 0) ans = mid , r = mid - 1;
else l = mid + 1;
}
printf("%d\n" , ans);
return 0;
}

【bzoj5174】[Jsoi2013]哈利波特与死亡圣器 二分+树形dp的更多相关文章

  1. BZOJ3420[POI2013]Triumphal arch&BZOJ5174[Jsoi2013]哈利波特与死亡圣器——树形DP+二分答案

    题目大意: 给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否则当A染完全部的点时,A胜.求能让A获胜的最 ...

  2. 「JSOI2013」哈利波特和死亡圣器

    「JSOI2013」哈利波特和死亡圣器 传送门 首先二分,这没什么好说的. 然后就成了一个恒成立问题,就是说我们需要满足最坏情况下的需求. 那么显然在最坏情况下伏地魔是不会走回头路的 因为这显然是白给 ...

  3. 【题解】hdu 3586 Information Disturbing 二分 树形dp

    题目描述 Information DisturbingTime Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java ...

  4. HDU 3586 Information Disturbing(二分+树形dp)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3586 题意: 给定一个带权无向树,要切断所有叶子节点和1号节点(总根)的联系,每次切断边的费用不能超 ...

  5. HDU 5682 zxa and leaf 二分 树形dp

    zxa and leaf 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5682 Description zxa have an unrooted t ...

  6. Codeforces 627D Preorder Test(二分+树形DP)

    题意:给出一棵无根树,每个节点有一个权值,现在要让dfs序的前k个结点的最小值最大,求出这个值. 考虑二分答案,把>=答案的点标记为1,<答案的点标记为0,现在的任务时使得dfs序的前k个 ...

  7. bzoj 2067: [Poi2004]SZN【贪心+二分+树形dp】

    第一问就是Σ(deg[u]-1)/2+1 第二问是二分,判断的时候考虑第一问的贪心规则,对于奇度数的点,两两配对之后一条延伸到上面:对于欧度数的点,两两配对或者deg[u]-2的点配对,然后一条断在这 ...

  8. HDU 3586 Information Disturbing (二分+树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  9. 【BZOJ2525】[Poi2011]Dynamite 二分+树形DP

    [BZOJ2525][Poi2011]Dynamite Description Byteotian Cave的结构是一棵N个节点的树,其中某些点上面已经安置了炸.药,现在需要点燃M个点上的引线引爆所有 ...

随机推荐

  1. nginx 反向代理到目录

    upstream yg{ server 127.0.0.x; } server { listen 80; server_name www.hikaru.pw; location / { rewrite ...

  2. 安装centos minimal 版本后安装setup包(linux)

    网络配置好后,输入命令 yum install setuptool,安装过程有两个确认,输入Y即可

  3. 用反射或委托优化switch太长的方法

    在代码进行优化的时候,发现了switch case太长,有的竟然长达30个远远超过一屏这样在代码的可读性来说很差.特别在我们看代码的时候要拉下拉框我个人觉得这是不合理的.但是我不建议有switch就进 ...

  4. [深度学习] 使用Darknet YOLO 模型破解中文验证码点击识别

    内容 背景 准备 实践 结果 总结 引用 背景 老规矩,先上代码吧 代码所在: https://github.com/BruceDone/darknet_demo 最近在做深度学习相关的项目的时候,了 ...

  5. selenium+python 搭建自动化环境

    一.以搭建windows平台为例 准备工具如下: 1)下载Python 2)安装,配置环境变量 3)安装selenium,通过pip安装,命令如下:  pip install selenium 方式二 ...

  6. Windows下MongoDB优化及问题处理

    1.MongoDB 服务器CPU占用100% 给Mongodb对应数据库中的表建立索引,这里我采用使用工具:NoSQL Manager for MongoDB 直接在表的属性栏,选择Indexes,右 ...

  7. idea compare功能 之一次bug修复

    一次bug修复 最近开发完了一套单点系统,jenkins打包上传到服务器就出问题, 可以启动但是不能正常工作. 首先想到的是环境不一样, 于是把jenkins的jdk和maven都调整和本机大版本相同 ...

  8. docker应用容器化准则—12 factor

    在云的时代,越来越多的传统应用需要迁移到云环境下,新应用也要求能适应云的架构设计和开发模式.而12-factor提供了一套标准的云原生应用开发的最佳原则. 在容器云项目中应用容器化主要参考12-Fac ...

  9. 《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像

    Cocos2d-x中的图像是通过精灵类来显示的.在Cocos2d-x中游戏中的每一个角色.怪物.道具都可以理解成是一个精灵,游戏背景作为一种特殊的单位将其理解成是一个精灵也没有什么不妥.在源文件本章目 ...

  10. [redis] linux下安装篇(1)

    一.redis是什么redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...