Sabota?

题目描述

某个公司有n个人, 上下级关系构成了一个有根树。其中有个人是叛徒(这个人不知道是谁)。对于一个人, 如果他下属(直接或者间接, 不包括他自己)中叛徒占的比例超过x,那么这个人也会变成叛徒,并且他的所有下属都会变成叛徒。你要求出一个最小的x,使得最坏情况下,叛徒的个数不会超过k。

输入

第一行包含两个正整数n,k(1<=k<=n<=500000)。

接下来n-1行,第i行包含一个正整数p[i+1],表示i+1的父亲是p[i+1](1<=p[i+1]<=i)。

输出

输出一行一个实数x,误差在10^-6以内都被认为是正确的。

样例输入

<span style="color:#333333"><span style="color:#333333">9 3
1
1
2
2
2
3
7
3</span></span>

样例输出

<span style="color:#333333"><span style="color:#333333">0.6666666667</span></span>

提示

HINT

答案中的x实际上是一个无限趋近于2/3但是小于2/3的数

因为当x取2/3时,最坏情况下3,7,8,9都是叛徒,超过了k=3。

来源

POI2017


solution

首先叛变的点应该出现在叶子,因为如果中间的点叛变导致了连环,那么叶子的点叛变一定也能导致连环。

我们要求一个最小的x使得叛变数<=k

令f[i]表示让以i为根的子树叛变的最大的x

那么有f[i]=max(所有e[i].v) min(f[e[i].v],size[e[i].v]/size[k]-1);

就是他的儿子叛变且儿子会带动他叛变

树形dp,数据有点卡

当时想不清楚就写,一直错

引用神犇的话 think twice,code once

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#define db double
#define maxn 500005
using namespace std;
int n,kk,head[maxn],sz[maxn],t,tot;
db f[maxn],Max;
struct node{
int v,nex;
}e[maxn];
void lj(int t1,int t2){
e[++tot].v=t2;e[tot].nex=head[t1];head[t1]=tot;
}
void dfs(int k){
for(int i=head[k];i;i=e[i].nex)dfs(e[i].v),sz[k]+=sz[e[i].v];
sz[k]++;
}
void work(int k){
bool fl=0;
for(int i=head[k];i;i=e[i].nex){
work(e[i].v);fl=1;
f[k]=max(f[k],min(f[e[i].v],(db)sz[e[i].v]/(sz[k]-1)));
}
if(!fl)f[k]=1;
if(sz[k]>kk)Max=max(Max,f[k]);
}
int main(){
cin>>n>>kk;
//if(n==1)
for(int i=2;i<=n;i++){
scanf("%d",&t);
lj(t,i);
}
dfs(1);
Max=0;for(int i=1;i<=n;i++)f[i]=0;
work(1);
if(Max==0)puts("0");
else printf("%.10lf\n",Max);
//rubbish problem
// a waste of ac rate
return 0;
}

Sabota?的更多相关文章

  1. BZOJ 4726: [POI2017]Sabota?

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

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

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

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

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

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

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

  5. [POI2017]Sabotaż

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

  6. BZOJ 4726 POI 2017 Sabota? 树形DP

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

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

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

  8. P5958 【[POI2017]Sabotaż】

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

  9. [bzoj4726]Sabota

    做的题太少,什么都要看题解.. 题意只给出一个叛徒,则他一定是叶子结点(最坏情况下),那么"带头反叛"的点一定构成了一条链. 令f[u]表示u不带头反叛的最小值,则考虑它的每一支儿 ...

随机推荐

  1. java基础——类加载与反射

    第1章 类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. (1)加载 就是指将class文件读入内存,并为之创 ...

  2. 【转】【win网络编程】socket中的recv阻塞和select的用法

    在编写ftp客户端程序时,在联通后使用recv函数进行接收欢迎信息时,需要申请内存进行接收数据保存,一次读取成功,但是由于一个随机的ftp服务端在说,欢迎信息的大小是不知道的,所以在尝试使用死循环,在 ...

  3. 第22题:链表中倒数第k个结点

    题目描述 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1.2.3.4.5 ...

  4. Django 模型与 Mysql 数据类型对应

    Django 1.11.9 文件路径:site-packages\django\db\backends\mysql\base.py–class DatabaseWrapper _data_types ...

  5. 《转载》ASP动态iframe

    原文:[ASP.NET]关于iframe的两个技巧 最近在给朋友写个网站,虽然不大,但是也碰到了一些问题.这篇就为解决ASP.NET中关于IFRAME的两个很现实的问题提供解决方法.PS:呵呵,又做了 ...

  6. Java poi 导出Excel并下载到客户端

    Maven配置,包含了其他文件格式的依赖,就全贴出来了 <dependency> <groupId>org.apache.poi</groupId> <art ...

  7. MySQL - CASE WHEN ... THEN ... ELSE ... END语句

    范例: CASE WHEN p.allow_over = 1 THEN p.allow_over_capital ELSE 0 END

  8. node 中的redis使用

    1.创建sql.config.js 配置文件 : var redis_db = { ", "URL":"127.0.0.1", "OPTIO ...

  9. Jack Straws POJ - 1127 (简单几何计算 + 并查集)

    In the game of Jack Straws, a number of plastic or wooden "straws" are dumped on the table ...

  10. UVA_1025 a Spy in the Metro 有向无环图的动态规划问题

    应当认为,有向无环图上的动态规划问题是动态规划的基本模型之一,对于某个模型,如果可以转换为某一有向无环图的最长.最短路径问题,则可以套用动态规划若干方法解决. 原题参见刘汝佳紫薯267页. 在这个题目 ...