Time Limits: 1000 ms Memory Limits: 65536 KB Detailed Limits

Description

企鹅国的网吧们之间由网线互相连接,形成一棵树的结构。现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料。但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把这K只企鹅安排到不同的机房(两只企鹅在同一个机房会吵架),然后拆掉一些网线,但是需要保证每只企鹅至少还能通过留下来的网线和至少另一只企鹅联机游戏。

所以他们想知道,最少需要保留多少根网线?

Input

第一行一个整数T,表示数据组数;

每组数据第一行两个整数N,K,表示总共的机房数目和企鹅数目。

第二行N-1个整数,第i个整数Ai表示机房i+1和机房Ai有一根网线连接(1≤Ai≤i)。

Output

每组数据输出一个整数表示最少保留的网线数目。

Sample Input

2

4 4

1 2 3

4 3

1 1 1

Sample Output

2

2

Data Constraint

对于30%的数据:N≤15;

对于50%的数据:N≤300;

对于70%的数据:N≤2000;

对于100%的数据:2≤K≤N≤100000,T≤10。

解题思路

本来和GhostCai神犇吐槽这道题,结果yy出了正解233。。首先要让他们两个两个配对一定比一坨优,所以问题转换成了先求出一个最大匹配,用n-最大独立集求,最大独立集直接dp。然后在分类讨论企鹅的数量,如果数量大于这个匹配,就说明剩下的企鹅只能抱团,再加一个K-最大匹配*2。如果数量小于这个匹配,就说明所有企鹅可以两个两个配对。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib> using namespace std;
const int MAXN = 100005; inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
} int n,T,K,ans;
int head[MAXN],cnt;
int to[MAXN<<1],nxt[MAXN<<1];
int dp[MAXN][3]; inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
} inline void dfs(int x,int fa){
dp[x][1]=1;
for(register int i=head[x];i;i=nxt[i]){
int u=to[i];
if(u==fa) continue;
dfs(u,x);
dp[x][1]+=dp[u][0];
dp[x][0]+=max(dp[u][0],dp[u][1]);
}
} int main(){
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
T=rd();
while(T--){
ans=0;memset(dp,0,sizeof(dp));
cnt=0;memset(head,0,sizeof(head));
n=rd();K=rd();
for(register int i=1;i<n;i++){
int x=rd();
add(x,i+1);add(i+1,x);
}
dfs(1,0);
ans=n-max(dp[1][0],dp[1][1]);
if(ans*2>=K) cout<<(K+1)/2<<endl;
else cout<<K-ans<<endl;
}
return 0;
}

JZOJ 5455 拆网线的更多相关文章

  1. JZOJ 5455. 【NOIP2017提高A组冲刺11.6】拆网线

    455. [NOIP2017提高A组冲刺11.6]拆网线 (File IO): input:tree.in output:tree.out Time Limits: 1000 ms  Memory L ...

  2. [JZOJ5455]【NOIP2017提高A组冲刺11.6】拆网线

    Description 企鹅国的网吧们之间由网线互相连接,形成一棵树的结构.现在由于冬天到了,供暖部门缺少燃料,于是他们决定去拆一些网线来做燃料.但是现在有K只企鹅要上网和别人联机游戏,所以他们需要把 ...

  3. 刷题总结——拆网线(noip模拟 贪心)

    题目: 给定一颗树··在保证有k个点与其它点连接的情况下问最少保留多少条边···· 树的节点树n和k均小于100000: 题解: 很容易看出来我们要尽量保留那种一条边连两个节点的情况···· 然后考试 ...

  4. 【NOIP2017提高A组冲刺11.6】拆网线

    和syq大兄弟吐槽题目不小心yy出了正解.. 最优的选法就是选两个两个相互独立的,欸这不就是最大匹配吗?那多的企鹅就新加一条边呗?不够的就除以2上取整呗? 欸?AC了? 树也是一个二分图,最大匹配=最 ...

  5. NOIP模拟 拆网线 - 贪心策略+dp

    题目大意: 给一颗n个节点的树,保留最少的边,使得每个连通块的大小都大于等于2,并且连通块的点数和等于k. 题目分析: 要想留下的边数最少,就要尽量多的选择单独的边,这里就要贪心:尽可能多的选择单独的 ...

  6. Inspiron 14 7000 系列 (7447) 游匣14 拆机图

    Inspiron 14 7000 系列 (7447)   游匣14 拆机图   游匣配置不多说,i5起步,标配4G GTX850M显卡,这么霸道的配置给我玩扫雷肯定不卡.配置高功耗就大,不过游匣的散热 ...

  7. JZOJ 5602.【NOI2018模拟3.26】Cti

    JZOJ 5602.[NOI2018模拟3.26]Cti Description 有一个 \(n×m\) 的地图,地图上的每一个位置可以是空地,炮塔或是敌人.你需要操纵炮塔消灭敌人. 对于每个炮塔都有 ...

  8. [jzoj]3760.【BJOI2014】Euler

    Link https://jzoj.net/senior/#main/show/3760 Description 欧拉函数  φ(n)  定义为不超过正整数 n 并且与 n 互素的整数的数目. 可以证 ...

  9. [jzoj 6086] [GDOI2019模拟2019.3.26] 动态半平面交 解题报告 (set+线段树)

    题目链接: https://jzoj.net/senior/#main/show/6086 题目: 题解: 一群数字的最小公倍数就是对它们质因数集合中的每个质因数的指数取$max$然后相乘 这样的子树 ...

随机推荐

  1. iPhoneX适配随笔

    1.安全区域 2.NavigationBar 和 TabBar的xib示意图 两个View要相同的效果,坐标不同 UIButton *btn = [UIButton buttonWithType:UI ...

  2. SpringBoot学习笔记(四):SpringBoot集成Mybatis-Plus+代码生成

    简介 官网:http://baomidou.oschina.io/mybatis-plus-doc/ 平时业务代码不复杂的时候我们写什么代码写的最多,就是我们的SQL语句啊,配置那么多的Mapper. ...

  3. PAT甲级——A1104 Sum of Number Segments

    Given a sequence of positive numbers, a segment is defined to be a consecutive subsequence. For exam ...

  4. apache netbeans不再集成tomcat

    老版本 8.2之前的,集成tomcat,安装使用比较简单https://netbeans.org/features/index.html 新版本的阿帕奇netbeans,则不集成tomcat,使用时, ...

  5. Apollo Lake设计缺陷,避免使用它们

    很多经验告诉我们,在不大幅加电压超频的情况下,CPU很少会用坏.多数情况下电脑退役都是主板或其他部件故障,或是性能严重落后而不得不淘汰.但是如果CPU在制造阶段就存有缺陷的话,情况就不是这样了. 英特 ...

  6. 表格Table好看的样式表

    caption { padding: 0 0 5px 0; width: 700px; font: italic 11px "Trebuchet MS" , Verdana, Ar ...

  7. Java超简明入门学习笔记(三)

    Java编程思想第4版学习笔记(三) 第五章 初始化与清理(构造器和垃圾回收机制)         Java有和C++类似的构造函数来为新创建的对象执行初始化及完成一些特殊的操作,有的类数据成员可能会 ...

  8. Qt源码下载

    这是官方下载地址:http://qt.nokia.com/downloads 点击右下角的 ftp.qt.nokia.com - Archive You can find our archive of ...

  9. HBase 数据坐标

  10. 内容溢出文字用"..."代替 以及超出文本内容换行

    text-overflow:ellipsis; white-space:nowrap; overflow:hidden; 超出.....代替 overflow: hidden; word-break: ...