$n \leq 500000$的树,开始有一个点是坏的,如果一个子树中坏点比例(不包括根节点)超过x那这整棵子树就会变坏,问最坏情况下不超过$K$个坏点的情况下$x$最小是多少。

被坑成傻逼。。

可以发现最坏情况下一开始的坏点一定是某个叶子。

首先容易看出的做法是二分完直接dp一次验证是否超过$K$,没想到log居然过不了5e5。

百度上有个大爷:“这不是二分+dp吗,不知道为啥过的人那么少。”妈耶我常数bigbig。。算了反正正解是O(n)的学一学。

$f(i)$--子树$i$中,要使$i$不被孩子污染,$x$至少是多少。$f(i)=max(min(f(j),\frac{size_j}{size_i-1}))$。最后把子树大小超过$K$的子树的$f$取个Max。

 #include<stdio.h>
#include<string.h>
//#include<iostream>
#include<algorithm>
using namespace std; #define LL long long
int qread()
{
char c; int s=,t=; while ((c=getchar())<'' || c>'') (c=='-') && (t=-);
do s=s*+c-''; while ((c=getchar())>='' && c<=''); return s*t;
} // int n,K;
#define maxn 500011
struct Edge{int to,next;}edge[maxn<<]; int first[maxn],le=;
void in(int x,int y) {Edge &e=edge[le]; e.to=y; e.next=first[x]; first[x]=le++;} double f[maxn]; int fa[maxn],size[maxn]; int main()
{
// freopen("sab97.in","r",stdin);
n=qread(); K=qread();
for (int i=;i<=n;i++) fa[i]=qread(),in(fa[i],i);
for (int i=;i<=n;i++) size[i]=;
for (int i=n;i;i--) size[fa[i]]+=size[i];
double ans=;
for (int x=n;x;x--)
{
f[x]=;
if (first[x]==) f[x]=;
else for (int i=first[x];i;i=edge[i].next)
{
Edge &e=edge[i];
f[x]=max(f[x],min(f[e.to],size[e.to]*1.0/(size[x]-)));
}
if (size[x]>K) ans=max(ans,f[x]);
}
printf("%.9f\n",ans);
return ;
}

BZOJ4726: [POI2017]Sabota?的更多相关文章

  1. 【树形dp】bzoj4726: [POI2017]Sabota?

    找点概率期望的题做一做 Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占 ...

  2. [bzoj4726][POI2017][Sabota?] (树形dp)

    Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者间接, 不包括他自己)中叛徒占的比例超过x,那么这个人 ...

  3. 【BZOJ4726】[POI2017]Sabota? 树形DP

    [BZOJ4726][POI2017]Sabota? Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属(直接或者 ...

  4. BZOJ 4726: [POI2017]Sabota?

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 301  Solved ...

  5. 【BZOJ-4726】Sabota? 树形DP

    4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved ...

  6. BZOJ 4726: [POI2017]Sabota? 树形dp

    4726: [POI2017]Sabota? 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4726 Description 某个公司有n ...

  7. BZOJ_4726_[POI2017]Sabota?_树形DP

    BZOJ_4726_[POI2017]Sabota?_树形DP Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他 下属 ...

  8. [POI2017]Sabotaż

    [POI2017]Sabotaż 题目大意: 一棵\(n(n\le5\times10^5)\)个结点的树,初始时有一个未知的黑点,其余全为白点.对于一个点,如果其子树中黑点所占比例超过\(x\),则这 ...

  9. P5958 【[POI2017]Sabotaż】

    P5958 [[POI2017]Sabotaż] 题意描述 在一棵以1号节点为根节点的树上,有很多纯洁的白点, BUT,突然有一个黑点出现(可能在任意位置) 它要染黑尽可能多的节点,而在一棵子树中, ...

随机推荐

  1. elasticsearch最全详细使用教程:入门、索引管理、映射详解、索引别名、分词器、文档管理、路由、搜索详解

    一.快速入门1. 查看集群的健康状况http://localhost:9200/_cat http://localhost:9200/_cat/health?v 说明:v是用来要求在结果中返回表头 状 ...

  2. WPF中做出一个QQ登陆界面

    Xaml: <Window x:Class="ChatSoftware.MainWindow" xmlns="http://schemas.microsoft.co ...

  3. 数据库_4_SQL介绍

    SQL SQL:Structured Query Language,结构化查询语言(数据已查询为主:99%是在进行查询操作)    what型语言,而非how型的语言. SQL分为三个部分: DDL: ...

  4. Java生成固定长度的随机字符串(以大小写字母和数字)

    package org.jimmy.autosearch2019.test; import java.util.ArrayList; import java.util.Random; /** * @a ...

  5. 《3+1团队》第八次团队作业:Alpha冲刺

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 3+1团队 团队博客地址 https://home.cnblogs.com/u/3-1group ...

  6. Bootstrap响应式布局(1)

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. HDU-1312-Black and Red

    这题其实和POJ的1979是同一道题,当时POJ使用cin写的,所以读入的时候,就很正确. 这次用scanf读入的时候,就出现了问题,我们在读完宽高之后,要用getchar吸收掉回车,然后每行末尾的回 ...

  8. ps命令查看子进程

    [root@centos7 log]# ps -f -e -o pid,ppid,pgid,comm PID PPID PGID COMMAND 5070 5068 5070 bash 7169 50 ...

  9. styled-components

    参考: http://www.alloyteam.com/2017/05/guide-styled-components/ https://medium.com/styled-components/g ...

  10. perl学习 之:my local our

    范围声明 和全局声明类似,词法范围声明也是在编译时起作用的.和全局声明不同的是,词法范围声明的作用范围是从声明开始到闭合范围的最里层(块,文件,或者 eval--以先到者为准).这也是为什么我们称它为 ...