【树形dp】bzoj4726: [POI2017]Sabota?
找点概率期望的题做一做
Description
Input
Output
Sample Input
1
1
2
2
2
3
7
3
Sample Output
HINT
题目分析
第一眼肯定是二分想法。但是好像不是很会贪心check。
于是干脆考虑dp,从问题反面入手。先丢开叛徒总数的限制,$f[i]$表示$i$这整颗子树没叛变的最小x值。转移就是$f[i]=max\{f[i],min\{size_j/(size_i-1),f[j]\}\}$.因为子树$i$叛变的情况需要同时满足:一是子树$j$占比例超过$x$,二是子树$j$也叛变了。那么,最小的$f[i]$只会出现在它们两个的最小值中。又由于所有情况下都要保证子树$i$不叛变,所以$f[i]$这里是取max的。最后统计答案时,就是所有子树$size>k$的最大$f[i]$。
看题还是不仔细,第一次看成“叛徒个数小于k"WA了一发。
#include<bits/stdc++.h>
const int eps = 1e-;
const int maxn = ; int n,k,tot[maxn];
double ans,f[maxn];
std::vector<int> a[maxn]; int read()
{
char ch = getchar();
int num = ;
bool fl = ;
for (; !isdigit(ch); ch = getchar())
if (ch=='-') fl = ;
for (; isdigit(ch); ch = getchar())
num = (num<<)+(num<<)+ch-;
if (fl) num = -num;
return num;
}
void dfs(int x)
{
tot[x] = ;
for (int i=; i<a[x].size(); i++)
dfs(a[x][i]), tot[x] += tot[a[x][i]];
if (tot[x]==) f[x] = ;
else{
for (int i=; i<a[x].size(); i++)
f[x] = std::max(f[x], std::min(f[a[x][i]], 1.0*tot[a[x][i]]/(tot[x]-)));
}
}
int main()
{
n = read(), k = read();
for (int i=; i<=n; i++) a[read()].push_back(i);
dfs();
for (int i=; i<=n; i++)
if (tot[i] > k) ans = std::max(ans, f[i]);
printf("%.8lf\n",ans);
return ;
}
END
【树形dp】bzoj4726: [POI2017]Sabota?的更多相关文章
- [bzoj4726][POI2017][Sabota?] (树形dp)
Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占的比例超过x,那么这个人 ...
- BZOJ4726: [POI2017]Sabota?
$n \leq 500000$的树,开始有一个点是坏的,如果一个子树中坏点比例(不包括根节点)超过x那这整棵子树就会变坏,问最坏情况下不超过$K$个坏点的情况下$x$最小是多少. 被坑成傻逼.. 可以 ...
- 【BZOJ4726】[POI2017]Sabota? 树形DP
[BZOJ4726][POI2017]Sabota? Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者 ...
- 【BZOJ-4726】Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- BZOJ 4726: [POI2017]Sabota? 树形dp
4726: [POI2017]Sabota? 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4726 Description 某个公司有n ...
- BZOJ_4726_[POI2017]Sabota?_树形DP
BZOJ_4726_[POI2017]Sabota?_树形DP Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属 ...
- [POI2017]Sabota【观察+树形Dp】
Online Judge:Bzoj4726 Label:观察,树形Dp,水题 题目描述 某个公司有n个人, 上下级关系构成了一个有根树.公司中出了个叛徒(这个人不知道是谁). 对于一个人, 如果他下属 ...
- BZOJ 4726 POI 2017 Sabota? 树形DP
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 128 Solved ...
- BZOJ 4726: [POI2017]Sabota?
4726: [POI2017]Sabota? Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 301 Solved ...
随机推荐
- safari不支持new Date函数
最近在做移动Web的时候,在PC上用Chrome调试都成功了,但是在iPhone上真机一测就出现了奇怪的问题.经过一系列调试发现是日期相关的地方出现了问题.起初怀疑是生产环境的问题,但用Mac版的sa ...
- NET Core项目部署
NET Core项目部署到linux(Centos7) 阅读目录 1.开篇说明 2.Jexus简单说明 3.Visual Studio 2015本地发布并且测试 4.配置Jexus并且部署.NET C ...
- 通过sqlserver sa密码修改windows操作系统密码
如果你不记得windows管理员的密码了,但知道sqlserver sa用户的密码,可以通过以下方式修改: 进入SQL之后执行以下语句: -- 允许配置高级选项 EXEC sp_configure ...
- 判断网站织梦DedeCms版本的方法
这个方法可以判断出目标网站所使用的织梦DedeCms是哪个版本的,打了哪一天的补丁. 在需要判断网站织梦版本的的URL路径后面添加/data/admin/ver.txt 如官方的:http://www ...
- MongoDB 最初级步骤
对库TEST下的LOG聚集集合中的inserttim字段加索引 步骤(注意:前四步步骤不能错,错了不行): 一,打开F:\mongodb\bin\mongo.exe,也可以用cmd命令指到这个exe执 ...
- 大都市 meg
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景. 昔日,乡下有依次编号为1.. ...
- PHP开发环境及搭建
自学PHP中,很多东西都不熟悉,在此做个记录,方便以后再次搭建PHP环境.这篇文章基本按照原文 ThinkPHP5开发环境安装和配置 ,在此感谢该作者 一.实验目的 1.掌握ThinkPHP5(简称 ...
- Win7环境下配置FTP
1.打开 控制面板-->程序和功能-->打开或关闭Windows资源,在弹出的窗体里找到 “Internet信息服务”,展开后选择“Ftp服务器",然后点击"确定&qu ...
- session会话
jsp会话篇session: package com.log; import java.io.IOException; import java.util.ArrayList; import java. ...
- 造成socket.error: [Errno 99] Cannot assign requested
socket.error: [Errno 99] Cannot assign requested address 网上你去搜,基本都是说bind的时候,地址已经被用了,都是胡扯.地址被用报的错误应该是 ...