题目大意:给出一棵树。将树中的一个节点去掉之后,这棵树会分裂成一些联通块。求去掉哪些点之后。全部联通块的大小不超过全部节点的一半。并按顺序输出。

思路:基础的子树统计问题,仅仅要深搜一遍就能够出解。这个步骤和求树的重心非常像,是树分治的基础。

CODE:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 10010
using namespace std; int points;
int head[MAX],total;
int next[MAX << 1],aim[MAX << 1]; int size[MAX];
bool ans[MAX]; inline void Add(int x,int y);
void DFS(int x,int last); int main()
{
cin >> points;
for(int x,y,i = 1;i < points; ++i) {
scanf("%d%d",&x,&y);
Add(x,y),Add(y,x);
}
DFS(1,0);
for(int i = 1;i <= points; ++i)
if(ans[i])
printf("%d\n",i);
return 0;
} inline void Add(int x,int y)
{
next[++total] = head[x];
aim[total] = y;
head[x] = total;
} void DFS(int x,int last)
{
size[x] = 1;
int max_size = 0;
for(int i = head[x];i;i = next[i]) {
if(aim[i] == last) continue;
DFS(aim[i],x);
size[x] += size[aim[i]];
max_size = max(max_size,size[aim[i]]);
}
max_size = max(max_size,points - size[x]);
if(max_size <= (points >> 1))
ans[x] = true;
}

最新文章

  1. apache的AB测试
  2. VMWare虚拟机NAT上网方法 亲测可用
  3. Android+Sqlite 实现古诗阅读应用(三)
  4. brew mac osx 上软件包管理工具
  5. Java实现人民币大写精讲
  6. cleartool mkview snapshot windows
  7. Android Intent简介
  8. MVC零基础学习整理(一)
  9. 利用Runtime给UITextView添加占位符(新方法)
  10. js中的clientWidth offsetWidth scrollWidth等的含义
  11. 使用django-compressor压缩静态文件
  12. UVW代码漫谈(一)
  13. 常用API3 BigData
  14. 公网IP被别人恶意解析的后果
  15. JQ获取CKeditor的值
  16. Linux 小知识翻译 - 「Linux和CPU的兼容性」
  17. Linux内核设计与实现 第四章
  18. Python+Flash+NodeJS 接口自动化平台
  19. Singer 学习八 运行&amp;&amp;开发taps、targets (三 开发tap)
  20. python读取并写入mat文件

热门文章

  1. 【11】specified value,computed value,used value计算方法
  2. pycharm调整字体大小
  3. 五、人生苦短,我用python【第五篇】
  4. hdu2024
  5. nginx的详解(四)
  6. nginx的详解(二)
  7. [UOJ#223][BZOJ4654][Noi2016]国王饮水记
  8. BZOJ 4318 OSU! ——期望DP
  9. P1754 球迷购票问题 (卡特兰数,递推)
  10. Garbage First介绍