题意:

有一棵n个节点的树,树上有k只猴子,这k只猴子所在位置可任意指定,但是每个点上最多只能有一只猴子,现在你要切掉尽可能多的边,但必须保证没有任何一只猴子被完全孤立,求最少得保留多少条边

题目还好,只不过偏要卡个常数,普通的快读都不行,还要更快的。。

从所有的叶子开始两个点两个点的取,相当于每两只猴子连一条边,取到根结束

之后剩下还没安放的猴子就只能每一只连一条边

PS:这个快读只能用文件读入

#include<stdio.h>
#include<vector>
#include<stdlib.h>
#include<string.h>
using namespace std;
vector<int> G[100005];
int k, ans, vis[100005];
struct FastIO
{static const int S = 2*100;int wpos;char wbuf[S];FastIO() : wpos(0) {}inline int xchar(){static char buf[S];static int len = 0, pos = 0;if (pos==len)pos = 0, len = fread(buf, 1, S, stdin);if (pos==len) exit(0);return buf[pos ++];}inline int xint(){int s = 1, c = xchar(), x = 0;while(c<=32) c = xchar();if(c=='-') s = -1, c = xchar();for(;'0'<=c && c<='9';c=xchar()) x = x*10+c-'0';return x * s;}~FastIO(){if(wpos) fwrite(wbuf, 1, wpos, stdout), wpos = 0;}
}io;void Sech(int u, int p)
{int i, v;for(i=0;i<G[u].size();i++){v = G[u][i];if(v==p)continue;Sech(v, u);}for(i=0;i<G[u].size();i++){v = G[u][i];if(v==p)continue;if(vis[v]==0){vis[v] = vis[u] = 1;if(k>=2)k -= 2, ans++;return;}}return;
}
int main(void)
{int T, n, i, u;//freopen("in.txt", "r", stdin);scanf("%d", &T);while(T--){n = io.xint();k = io.xint();for(i=1;i<=n;i++)G[i].clear();for(i=2;i<=n;i++){u = io.xint();G[u].push_back(i);G[i].push_back(u);}ans = 0;memset(vis, 0, sizeof(vis));Sech(1, 0);printf("%d\n", ans+k);}return 0;
}

HDU 6178 2017 多校训练:Monkeys(DFS)相关推荐

  1. HDU 6134 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)

    实在太长了直接放题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6134 这题就是求 考虑当Gcd(i, j)==1时,除了j为1的情况,其它时候i/j一 ...

  2. HDU 6180 2017 多校训练:Schedule

    题意: 和 51nod 1428 活动安排问题 一模一样,只不过还要求一个时间和 http://blog.csdn.net/jaihk662/article/details/77489061 如何求出 ...

  3. HDU 6166 2017 多校训练:Senior Pan(最短路)

    题意: 有一张n个点m条边的有向图,还有一个包含k个点的点集,求出这个点集中任意两点间最短路的最小值 官方题解看不懂.. 如果一条边的两个端点都在这个集合中,就将这条边直接删掉(中间记录下最小值)以后 ...

  4. HDU 6162 2017 多校训练:Ch's gift(树链剖分)

    题意: 有一棵n个节点的树,m次查询,每次查询x, y, a, b表示节点x到y的路径上所有在[a, b]范围内的权值和 树链剖分+线段树 询问离线,按a和b分别排序求出所有小于a和所有小于b+1的权 ...

  5. HDU 6170 2017 多校训练:Two strings(DP)

    题意: 给你两个字符串:第一个字符串只包含小写大写字母 第二个字符串除了字母之外,还有'.'和'*',其中'.'可以当成任意一个字符,'*'表示前面那个字符可以重复若干次 当然也可以重复0次,例如a. ...

  6. 2017 多校训练第二场 HDU 6047 Maximum Sequence(贪心+优先队列)

    Maximum Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. (2017多校训练第四场)HDU - 6078 Wavel Sequence dp

    传送门:点击打开链接 定义状态dp[i][j][0]表示以a[i],b[j]结尾的且为波谷的情况总和,dp[i][j][1] 为波峰. 对于某个i,j满足a[i] == b[j],则dp[i][j][ ...

  8. (2017多校训练第一场)HDU - 6034 Balala Power! 贪心

    很容易就想到把每个字母的权重都算出来,然后把权重最大的赋值成25,次大的赋值成24......以此类推. 但是字符串长度最大为100000,也就是说一个字母的权重最大是26^100000次方左右,太大 ...

  9. 2017 多校3 hdu 6061 RXD and functions

    2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...

最新文章

  1. idea springboot配置外置tomcat好处
  2. java qq登录界面_用java实现QQ登录界面怎么写
  3. 入门Pandas不可不知的技巧
  4. html 图片展示 3d,CSS3 3D图像显示
  5. MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本
  6. 安装visual studio code(VS Code)并修改为中文
  7. ORM Model查询页生成
  8. Linux—磁盘和文件系统管理(二)
  9. Laravel响应宏原理
  10. php hscan,hgetall 替代 hscan的用法详解。
  11. linux学习--体验免安装版本的linux
  12. icarus主题的博客加载太慢
  13. 虚拟机中的linux系统无法识别SD卡
  14. Office 365组命名策略 - 补充
  15. 3、可燃气体的爆炸极限
  16. windows html封装,怎样win7自带的sysprep封装系统
  17. 如何选挂耳式运动耳机?六款挂耳式运动耳机推荐
  18. 关于xds100仿真器的ftdi驱动无法使用的问题
  19. 肠道菌群检测粪便样本的采集保存方法
  20. BUUCTF others babystack

热门文章

  1. 语音识别的应用都有哪些
  2. python绘制动态条形图_Python 绘图与可视化 matplotlib 动态条形图 bar
  3. React-组件通信
  4. C++实现LRU算法(LeetCode 146 LRU缓存机制)
  5. jdbc preparestatement 执行多条语句_MyBatis执行器
  6. 利用计算机解决的生活问题,利用计算机解决经典动力学问题
  7. 使用Reloader实现更新configmap后自动重启pod
  8. sublime text3 智能提示和自动补全
  9. Linux查看和修改IP地址
  10. java判断小数点后是否为0,是的话则取整,不是的话则保留