题目描述 Description

给出一棵树,求出树的中心。

为了定义树的中心,首先给每个结点进行标号。对于一个结点K,如果把K从树中删除(连同与它相连的边一起),剩下的被分成了很多块,每一块显然又是一棵树(即剩下的部分构成了一个森林)。则给结点K所标的号就是森林中结点个数最多的树所拥有的结点数。如果结点K的标号不大于其他任何一个结点的标号,则结点K被称为是树的中心。

输入描述 Input Description

输入:

输入的第一行包含一个整数N(1≤N≤16 000),表示树中的结点数。接下来N-1行,每个两个整数a,b,由一个空格分隔,表示a与b之间有一条边。

输出描述 Output Description

输出:

输出两行,第一行两个整数v,T,v表示树的中心结点的标号,T表示树有多少个中心。第二行包含T个数,为所有树的中心的编号,按升序排列。

样例输入 Sample Input

样例输入:

7

1 2

2 3

2 4

1 5

5 6

6 7

样例输出 Sample Output

样例输出:

3 1

1

数据范围及提示 Data Size & Hint

数据范围: 20% N<=100 100% N<=16 000

______________________________________________________________________________________________________

树形动归

深搜,得到每个点为根的子树的大小,n-每个子树大小得到,这其中较大值为大小,值最小的点就是重心。

_______________________________________________________________________________________________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=16010;
4 int n;
5 struct edge
6 {
7 int u,v,next;
8 }e[maxn<<1];
9 int head[maxn],js;
10 int size[maxn],ss[maxn];
11 void addage(int u,int v)
12 {
13 e[++js].u=u;e[js].v=v;
14 e[js].next=head[u];head[u]=js;
15 }
16 void dfs(int u,int fa)
17 {
18 size[u]=1;
19 for(int i=head[u];i;i=e[i].next)
20 {
21 int v=e[i].v;
22 if(v!=fa)
23 {
24 dfs(v,u);
25 if(size[v]>ss[u])ss[u]=size[v];
26 size[u]+=size[v];
27 }
28 }
29 if(ss[u]<n-size[u])ss[u]=n-size[u];
30 }
31 int main()
32 {
33 scanf("%d",&n);
34 for(int u,v,i=1;i<n;++i)
35 {
36 scanf("%d%d",&u,&v);
37 addage(u,v);
38 addage(v,u);
39 }
40 dfs(1,0);
41 int sz=n,nn=0;
42 for(int i=1;i<=n;++i)
43 {
44 if(ss[i]<sz)
45 {
46 sz=ss[i];
47 nn=1;
48 }
49 else if(ss[i]==sz)nn++;
50 }
51 printf("%d %d\n",sz,nn);
52 for(int i =1;i<=n;++i)
53 if(ss[i]==sz)printf("%d ",i);
54 return 0;
55 }

codevs3639的更多相关文章

随机推荐

  1. MySQL全面瓦解15:视图

    概述 很多时候,我们会有一些很复杂的数据库操作,比如整合用户的行为数据,那这些数据可能包含用户的餐饮.生活日用.充值消费.交通出行.通讯物流.交通出行.医疗保健.住房物业.运动健康... 基于此,我们 ...

  2. 手摸手带你用Hexo撸博客(一)

    原文地址 手摸手带你用Hexo撸博客(一) 环境搭建 安装 node 狂点下一步 命令行输入此条命令 如果能看到版本号则安装成功 node -v 安装Git (同上) 实在不会的小伙伴百度一下,教程很 ...

  3. [leetcode33Search in Rotated Sorted Array]在排序旋转后序列中找目标值

    直接上代码 /** * Created by lvhao on 2017/6/30. * Suppose an array sorted in ascending order is rotated a ...

  4. 一文彻底吃透MyBatis源码!!

    写在前面 随着互联网的发展,越来越多的公司摒弃了Hibernate,而选择拥抱了MyBatis.而且,很多大厂在面试的时候喜欢问MyBatis底层的原理和源码实现.总之,MyBatis几乎成为了Jav ...

  5. [每日一题]面试官问:for in和for of 的区别和原理?

    关注「松宝写代码」,精选好文,每日一题 ​时间永远是自己的 每分每秒也都是为自己的将来铺垫和增值 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...

  6. db_install.rsp dbca.rsp netca.rsp 详解【转】

    db_install.rsp详解 #################################################################### ## Copyright(c ...

  7. Linux学习笔记 | 配置Samba

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 ...

  8. (十九)hashlib模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 注意:md5和sha25 ...

  9. kubernetes机理之调度器以及控制器

    一 了解调度器 1.1  调度器是如何将一个pod调度到节点上的 我们都已然知晓了,API服务器不会主动的去创建pod,只是拉起系统组件,这些组件订阅资源状态的通知,之后创建相应的资源,而负责调度po ...

  10. 利用iptables防火墙保护web服务器

    实例:利用iptables防火墙保护web服务器 防火墙--->路由器-->交换机-->pc机 配置之前,清空下已有的规则,放在规则冲突不生效 工作中,先放行端口写完规则,再DROP ...