[POI2013]Łuk triumfalny

题目大意:

一棵\(n(n\le3\times10^5)\)个结点的树,一开始\(1\)号结点为黑色。\(A\)与\(B\)进行游戏,每次\(B\)能选择不超过\(k\)个结点染成黑色,然后\(A\)从当前点出发走到一个相邻的结点。若\(A\)从\(1\)号结点出发,则\(k\)最小取多少能保证\(A\)每次走到的点都是黑点?

思路:

二分答案\(k\)后使用树形DP判断是否可行。

从叶子往根考虑,\(f_i\)表示将\(i\)的子树全部染黑需要从祖先获取多少染色的机会(就是说现在有\(f_i\)个结点无法染色)。

转移方程为\(f_x=\max(\sum(f_y+1)-k,0)\)。

最后若\(f_1=0\)则说明可行。

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

源代码:

#include<cstdio>
#include<cctype>
#include<vector>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=3e5+1;
std::vector<int> e[N];
inline void add_edge(const int &u,const int &v) {
e[u].push_back(v);
e[v].push_back(u);
}
int f[N],k;
void dfs(const int &x,const int &par) {
f[x]=-k;
for(register unsigned i=0;i<e[x].size();i++) {
const int &y=e[x][i];
if(y==par) continue;
dfs(y,x);
f[x]+=f[y]+1;
}
f[x]=std::max(f[x],0);
}
inline bool check(const int &k) {
::k=k;
dfs(1,0);
return f[1]==0;
}
int main() {
const int n=getint();
for(register int i=1;i<n;i++) {
add_edge(getint(),getint());
}
int l=e[1].size(),r=e[1].size();
for(register int i=2;i<=n;i++) {
r=std::max(r,(int)e[i].size()-1);
}
while(l<=r) {
const int mid=(l+r)>>1;
if(check(mid)) {
r=mid-1;
} else {
l=mid+1;
}
}
printf("%d\n",r+1);
return 0;
}

[POI2013]Łuk triumfalny的更多相关文章

  1. Also unsere eigene Christian Louboutin Webshop bietet die überragende Christian Louboutin Schuhe uk schiebt zusammen mit kostengünstigen Wert

    www.heelschuhe.de, Es ist wirklich eine der Frauen erfordern immer interessant und auch Louboutin Pu ...

  2. comms.nottingham.ac.uk/learningtechnology

    http://comms.nottingham.ac.uk/learningtechnology/

  3. Data.gov.uk电子政务云,牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践

    牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践 我是牛津互联网研究院的研究员,是英国开放互联网的一个主要的研究机构和相关政策制订的一个机构.今天主要给大家介绍一下英国数据治理的一些现状和实践 ...

  4. 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  5. Genome-wide gene-environment analyses of depression and reported lifetime traumatic experiences in UK Biobank

    Genome-wide gene-environment analyses of depression and reported lifetime traumatic experiences in U ...

  6. [POI2013]Polaryzacja

    [POI2013]Polaryzacja 题目大意: 给定一棵\(n(n\le250000)\)个点的树,可以对每条边定向成一个有向图,这张有向图的可达点对数为树上有路径从\(u\)到达\(v\)的点 ...

  7. [POI2013]Taksówki

    [POI2013]Taksówki 题目大意: ABC三地在同一条直线上,AC相距\(m(m\le10^{18})\)米,AB相距\(d\),B在AC之间.总共有\(n(n\le5\times10^5 ...

  8. [POI2013]Usuwanka

    [POI2013]Usuwanka 题目大意: 一排\(n\)个球,有黑白两种颜色.每取走一个球会在原位置放一个水晶球.求构造一种取球方案,满足: 每次取走\(k\)个白球和\(1\)个黑球: 一次取 ...

  9. [POI2013]Morskie opowieści

    [POI2013]Morskie opowieści 题目大意: 一个\(n(n\le5000)\)点\(m(m\le5000)\)边无向图,边权均为\(1\),有\(k(k\le10^6)\)个询问 ...

随机推荐

  1. 用Riffstation扒带

    有人说扒带本质就是扒和声 编曲初学者如果是自学的情况下很容易陷入瓶颈,网络上的编曲爱好者大都建议去多扒带,所谓扒带其实就是把别人的编曲自己编出来,然而这要很好的听力,下面我介绍的这款软件就是用来扒和声 ...

  2. scala 基础知识总结

    在最开始处引入 log 相关的 包 import org.apache.log4j.{Logger,Level} 在需要屏蔽日志输出的地方加上这两行代码 // 屏蔽不必要的日志显示在终端上 Logge ...

  3. CSS media--(来自网易)

    概述 通过媒体查询为不同的设备和大小配置不同的样式.代码展示 /* media */ /* 横屏 */ @media screen and (orientation:landscape){ } /* ...

  4. 20155216 2016-2017-2 《Java程序设计》第八周学习总结

    20155216 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 认识NIO Java NIO 由以下几个核心部分组成: Channels Buffers S ...

  5. [Alg::Trick]小白鼠找毒酒

    题目来源:牛客网 https://www.nowcoder.com/questionTerminal/c26c4e43c77440ee9497b20118871bf1 8瓶酒一瓶有毒,用人测试.每次测 ...

  6. 关于USBHID协议以及鼠标键盘描述符的解释【转】

    转自:https://blog.csdn.net/jiujiujiuqiuqiuqiu/article/details/47277685 一.HID设备识别 前面有提到关于SCSI协议的USB设备实现 ...

  7. linux c中select使用方法

    1.select函数作为定时器使用    it_value.tv_sec = 0;    it_value.tv_usec = 100000:    select(1,NULL,NULL,NULL,& ...

  8. java Socket和ServerSocket多线程编程

    这是在一本java教材上看到的,做了点修改.具体本教材记不清楚了,Sorry.放在这里,只是让自己需要的时候能够容易找到. 程序分两部分,服务端和客户端.先把服务端运行起来,在运行客户端.整个过程就是 ...

  9. 巧用PHP数组函数

    2014年3月5日 08:48:39 情景:项目中需要根据传递来的参数的不同,使用不同的缓存 假如传递来的参数最多有这几个(在这个范围内,但是每次传过来的参数不确定): $arg = array( ' ...

  10. 解决urbuntu桌面本客户端输入ll command not found

    用桌面版的urbuntu系统,打开客户端输入ll,报错如下 于是度娘,解决方案:可以作如下修改:打开 ~/.bashrc 找到 #alias ll=’ls -l’,去掉前面的#就可以了.(关闭原来的终 ...