[bzoj4726][POI2017][Sabota?] (树形dp)
Description
Input
Output
Sample Input
Sample Output
- 0.6666666667
HINT
Source
Solution
树形dp嘛。
来自popoqqq的题解:
1.我们可以证明,最坏情况下,叛徒一定是叶子节点。
即,若有一个非叶节点是叛徒,且其儿子不是叛徒,而它父亲又被策反了,那么它的儿子是叛徒从而策反父亲的机率||比例显然更优
2.我们可以得出,一人策反,全家策反,也就是一些叛徒一定在整颗子树里
对于一个点x,设f[x]为x点不被策反需要的最小的比例
那么初始态,即叶子节点f[叶]=1
对于每个非叶节点,枚举儿子,在儿子中取最大的,儿子都是叛徒的比例或儿子不是叛徒的最小值来满足此点不是叛徒
对于每个大小大于k的子树,记录答案,去最大值
代码比较简单,用记事本手写直接交就ac了
- #include <stdio.h>
- #include <string.h>
- #define MaxN 500010
- #define MaxBuf 1<<22
- #define RG register
- #define inline __inline__ __attribute__((always_inline))
- #define Blue() ((S==T&&(T=(S=B)+fread(B,1,MaxBuf,stdin),S==T))?0:*S++)
- #define dmax(a,b) ((a)>(b)?(a):(b))
- #define dmin(a,b) ((a)<(b)?(a):(b))
- char B[MaxBuf],*S=B,*T=B;
- template<class Type>inline void Rin(RG Type &x){
- x=;RG int c=Blue();
- for(;c<||c>;c=Blue())
- ;
- for(;c>&&c<;c=Blue())
- x=(x<<)+(x<<)+c-;
- }
- bool isn_leave[MaxN];
- int n,sz[MaxN],m;
- double f[MaxN],ans;
- struct Pointer{
- int to;
- Pointer *next;
- }*fir[MaxN],mem[MaxN],*tot=mem;
- inline void link(RG int x,RG int y){
- isn_leave[x]=true;
- *++tot=(Pointer){y,fir[x]},fir[x]=tot;
- }
- void _dfs(RG int at){
- sz[at]=;
- for(Pointer *iter=fir[at];iter;iter=iter->next)
- _dfs(iter->to),sz[at]+=sz[iter->to];
- }
- void tree_dp(RG int at){
- if(!isn_leave[at]) {f[at]=1.000; return;}
- for(Pointer *iter=fir[at];iter;iter=iter->next){
- tree_dp(iter->to);
- f[at]=dmax(f[at],dmin(f[iter->to],(double)sz[iter->to]/(sz[at]-)));
- }
- if(sz[at]>m)
- ans=dmax(ans,f[at]);
- }
- int main(){
- Rin(n),Rin(m);
- for(RG int i=;i<=n;i++){
- RG int pa;
- Rin(pa);
- link(pa,i);
- }
- _dfs(); tree_dp();
- printf("%.10lf\n",ans);
- return ;
- }
[bzoj4726][POI2017][Sabota?] (树形dp)的更多相关文章
- 【BZOJ4726】[POI2017]Sabota? 树形DP
[BZOJ4726][POI2017]Sabota? Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者 ...
- BZOJ 4726: [POI2017]Sabota? 树形dp
4726: [POI2017]Sabota? 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4726 Description 某个公司有n ...
- BZOJ 4726 POI 2017 Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- 【树形dp】bzoj4726: [POI2017]Sabota?
找点概率期望的题做一做 Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占 ...
- BZOJ4726: [POI2017]Sabota?
$n \leq 500000$的树,开始有一个点是坏的,如果一个子树中坏点比例(不包括根节点)超过x那这整棵子树就会变坏,问最坏情况下不超过$K$个坏点的情况下$x$最小是多少. 被坑成傻逼.. 可以 ...
- 【BZOJ-4726】Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- BZOJ_4726_[POI2017]Sabota?_树形DP
BZOJ_4726_[POI2017]Sabota?_树形DP Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属 ...
- [POI2017]Sabota【观察+树形Dp】
Online Judge:Bzoj4726 Label:观察,树形Dp,水题 题目描述 某个公司有n个人, 上下级关系构成了一个有根树.公司中出了个叛徒(这个人不知道是谁). 对于一个人, 如果他下属 ...
- BZOJ 4726: [POI2017]Sabota?
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 301 Solved ...
随机推荐
- oracle 定时器调用存储过程
转载请说明出处:http://t22011787.iteye.com/blog/1112745 一.查询系统中的job,可以查询视图 --相关视图 select * from dba_jobs; se ...
- CodeForces 731C Socks (DFS或并查集)
题意:有n只袜子,k种颜色,在m天中,问最少修改几只袜子的颜色,可以使每天穿的袜子左右两只都同颜色. 析:很明显,每个连通块都必须是同一种颜色,然后再统计最多颜色的就好了,即可以用并查集也可以用DFS ...
- php insteadof 作用
PHP5的另一个新成员是instdnceof关键字.使用这个关键字可以确定一个对象是类的实例.类的子类,还是实现了某个特定接口,并进行相应的操作.在某些情况下,我们希望确定某个类是否特定的类型,或者是 ...
- 反向代理与Real-IP和X-Forwarded-For(转)
如下图所示,客户端通过Nginx Proxy1 和 Nginx Proxy2 两层反向代理才访问到具体服务Nginx Backend(或如Tomcat服务).那Nginx Backend如何才能拿到真 ...
- [Usaco2018 Feb]Snow Boots
Description 到冬天了,这意味着下雪了!从农舍到牛棚的路上有N块地砖,方便起见编号为1-N,第i块地砖上积了fi英尺的雪.在Farmer John的农舍的地窖中,总共有B双靴子,编号为1-B ...
- [ Nowcoder Contest 167 #C ] 部分和
\(\\\) \(Description\) 给出一个长度为\(N\)的数组\(A[i]\),保证\(N\)为 \(2\) 的整次幂. 对于每个 \(i\ (i\in [0,N))\)求所有满足\(( ...
- JavaScript中逻辑运算符的使用
逻辑运算符用于对一个或多个布尔值进行逻辑运算.在JavaScript中有3个逻辑运算符,如下表所示. 运算符 描述 示例 && 逻辑与 a && b //当a和b都为 ...
- 关于FLASK WEB开发8d 数据库迁移的问题
首先, 第一步,要删除data-dev.sqlite这个数据库 第二步,进行下面的重建 暂时的解决办法是: python manage.py shell In [2]: from app import ...
- 用antlr4来实现《按编译原理的思路设计的一个计算器》中的计算器
上次在公司内部讲<词法分析——使用正则文法>是一次失败的尝试——上午有十几个人在场,下午就只来了四个听众. 本来我还在构思如何来讲“语法分析”的知识呢,但现在看来已不太可能. 这个课程没有 ...
- GCC编译连接c++代码的四个阶段(Four stages of GCC compilation of C++ code)
There are four stages for GCC to compile c/c++ applications: Preprocessing, Compilation proper, Asse ...