正题

jzoj题目链接:https://jzoj.net/senior/#main/show/5455


题目大意

一棵树中选k个点要求留下最小边使每个点都至少有一个点连接。


解题思路

我们先不考虑树的限制,那么k个点满足要求的话最小边数为(k+1)/2(k+1)/2(k+1)/2,然后我们考虑一颗树上有多少个这样的点对满足。也就是选择最多的边数使得每条边两边的点都不重复。

当然,这样的话每条边选最下面的边是最优的,这时候我们就要知道输入保证了一个点的父亲的编号小与他,所以我们按照这个加边顺序倒着枚举点就保证了每次加他和他父亲是最优的了。

然后如果有还不足的就一点对一边就好了。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 110000
using namespace std;
int fa[N],t,n,k,x,v[N],ans;
int read(){char c=getchar();int x=0;for(;'0'>c||c>'9';c=getchar());for(;'0'<=c&&c<='9';c=getchar()) x=x*10+(c-'0');return x;
}
int main()
{freopen("init.txt","r",stdin);//freopen("tree.out","w",stdout);scanf("%d",&t);for(int ti=1;ti<=t;ti++){memset(v,0,sizeof(v));scanf("%d%d",&n,&k);ans=0;for(int i=2;i<=n;i++)fa[i]=read();for(int i=n;i>1;i--)if(!v[i]&&!v[fa[i]]) ans++,v[fa[i]]=true;//允许加边if(ans*2<k) ans+=k-ans*2;//点对不足else if(ans*2>k) ans-=(ans*2-k)/2;//点对超过printf("%d\n",ans);}
}

nssl1149,jzoj5455-拆网线【贪心】相关推荐

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

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

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

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

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

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

  4. ssl提高组周六模拟赛【2018.9.15】

    前言 这次那了一个和fuW并列的第一,然而似乎都不是很难.(因为第1题有bug所以满分不了) 成绩 只放Rank 1∼10Rank1∼10Rank\ 1\sim10 RankRankRank Pers ...

  5. [补档]noip2019集训测试赛(十四)

    Problem A: Fibonacci(fib.pas/cpp) Time Limit: 1000 ms Memory Limit: 128 MB Description 豆豆最近迷上了Fibona ...

  6. 漫画:五分钟学会贪心算法!

    假设一个问题比较复杂,暂时找不到全局最优解,那么我们可以考虑把原问题拆成几个小问题(分而治之思想),分别求每个小问题的最优解,再把这些"局部最优解"叠起来,就"当作&qu ...

  7. 趣文:一根网线发起的攻击

    转载自博客:EtherDream の 原创空间 刚上大学没多久,就遇到件头疼事. 富二代们刚来就带着笔记本电脑,这让咱们只能玩手机的屌丝辈们羡慕嫉妒恨.要命的事来了,晚上断电不断网,于是熄灯后笔记本仍 ...

  8. 趣事:一根网线发起的攻击

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | EtherDream 来源 | cnblogs ...

  9. hdu4825 字典树 + 贪心

    题意:       给你n个数,然后给你m组询问,每组询问给你一个数,输出n个数中与该数亦或 的最大的那个数,输出的是被亦或的那个数,不是亦或后的结果. 思路:       我用的是字典树+贪心,首先 ...

最新文章

  1. 什么是OKR?目标管理如何做?
  2. 抓取一个连续的网页_搞懂各大搜索引擎蜘蛛的抓取规则,快速获得排名!
  3. C#基础练习(时间的三连击)
  4. 64位debian系统下安装inodeClient
  5. 接收udp数据_聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo
  6. 被远程机器长时间无响应 (错误码:[308])_自动折叠式“Rollbot”为完全不受束缚的软机器人铺平了道路...
  7. AtCoder-2379 - 连接竹竿 思维 | 数学
  8. rust笔记9 错误处理
  9. Error: Trying to remove yum, which is protected
  10. 广州市出租车GPS数据(20210127)
  11. 酒店IPTV数字电视系统解决方案
  12. php ucenter单点登录,说说ucenter的单点登录
  13. 连续时间 Markov 链从某一状态 i 转移到其他状态之前在 i 逗留的时间服从指数分布
  14. centos7 安装 oceanbase 单机版测试
  15. android分区卸载命令行,Android ADB命令 将apk安装到系统应用及删除方法
  16. linux 忽略错误信息,linux – 由于文件模式错误而忽略/etc/logrotate.conf
  17. SQL2008服务器连接失败
  18. Android悬浮窗原理解析(Window)[源码]
  19. 李国庆是如何被“踢出”当当的?
  20. Unity Serialize总结

热门文章

  1. 计算机专业专业课代号408,计算机专业考研你一定要知道的事情!
  2. c语言复数的运算实验报告,C语言复数的运算(实验报告).doc
  3. python递归函数查询表_python---------------递归函数
  4. Java实现AVL平衡树
  5. [蓝桥杯]错误票据---stringstream应用举例
  6. 数据结构与算法--图论-深度优先搜索及其应用
  7. 文本框赋值guide matlab,科学网-Matlab: 学习GUI (使用GUIDE时需注意的几个问题)-刘磊的博文...
  8. 噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...
  9. Java开发Web Service的几种解决方案
  10. HDU 6061 RXD and functions(NTT)