树的重心即树上某结点,删除该结点后形成的森林中包含结点最多的树的结点数最少。

一个DFS就OK了。。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 222222
struct Edge{
int u,v,next;
}edge[MAXN<<];
int NE,head[MAXN];
void addEdge(int u,int v){
edge[NE].u=u; edge[NE].v=v; edge[NE].next=head[u];
head[u]=NE++;
}
int n,size[MAXN],x,y;
void dfs(int u,int fa){
int cnt=,res=;
for(int i=head[u]; i!=-; i=edge[i].next){
int v=edge[i].v;
if(v==fa) continue;
dfs(v,u);
cnt+=size[v];
res=max(res,size[v]);
}
size[u]=cnt;
res=max(res,n-size[u]);
if(y>res) y=res,x=u;
else if(y==res && x>u) x=u;
}
int main(){
int t,a,b;
scanf("%d",&t);
while(t--){
NE=;
memset(head,-,sizeof(head));
scanf("%d",&n);
for(int i=; i<n; ++i){
scanf("%d%d",&a,&b);
addEdge(a,b); addEdge(b,a);
}
y=(<<);
dfs(,);
printf("%d %d\n",x,y);
}
return ;
}

最新文章

  1. 【Swift学习】Swift编程之旅---Subscripts下标(十六)
  2. CSS:static/relative/absolute
  3. PLSQL_Oracle簇表和簇表管理Index clustered tables(案例)
  4. 李洪强iOS开发之OC[008] -创建一个对象并访问实例变量
  5. sim卡中电话本(ADN)的简要格式
  6. LeetCode: Palindrome Partitioning [131]
  7. javascript设计模式之解释器模式详解
  8. 8.javaweb之session
  9. 实现数组元素互换位置(乘机理解java参数传递)
  10. C# -- FTP上传下载
  11. asp.net mvc各种传值方式大全
  12. JAVA生成一个二维数组,使中间元素不与相邻的9个元素相等,并限制每一个元素的个数
  13. PostgreSQL 的命令行工具 psql 的常用命令
  14. PostgreSQL和MySQL
  15. zabbix docker - 安装和初始化配置
  16. 《Linux课本》读书笔记 第十七章 模块
  17. windows命令行中英文切换
  18. python练习题-day7
  19. TypeScript 之 声明文件的发布
  20. Linux下查看系统启动 、运行以及安装时间

热门文章

  1. 抓包工具 - Fiddler - (二)
  2. Eclipse中安装svn的插件安装和使用
  3. 获取任意网站的图标,标题栏logo,网站logo
  4. POJ 3177 Redundant Paths 无向图边双联通基础题
  5. ACM-The Coco-Cola Store
  6. 为什么说for循环设置循环变量的那部分是一个父作用域?
  7. POJ1679 The Unique MST
  8. 限制MYSQL从服务器为只读状态
  9. [9018_1563][bzoj_2144]跳跳棋
  10. 第2章 掌握C++