codevs3639
给出一棵树,求出树的中心。
为了定义树的中心,首先给每个结点进行标号。对于一个结点K,如果把K从树中删除(连同与它相连的边一起),剩下的被分成了很多块,每一块显然又是一棵树(即剩下的部分构成了一个森林)。则给结点K所标的号就是森林中结点个数最多的树所拥有的结点数。如果结点K的标号不大于其他任何一个结点的标号,则结点K被称为是树的中心。
输入:
输入的第一行包含一个整数N(1≤N≤16 000),表示树中的结点数。接下来N-1行,每个两个整数a,b,由一个空格分隔,表示a与b之间有一条边。
输出:
输出两行,第一行两个整数v,T,v表示树的中心结点的标号,T表示树有多少个中心。第二行包含T个数,为所有树的中心的编号,按升序排列。
样例输入:
7
1 2
2 3
2 4
1 5
5 6
6 7
样例输出:
3 1
1
数据范围: 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的更多相关文章
随机推荐
- Spring AOP 实战运用
Spring AOP 实战 看了上面这么多的理论知识, 不知道大家有没有觉得枯燥哈. 不过不要急, 俗话说理论是实践的基础, 对 Spring AOP 有了基本的理论认识后, 我们来看一下下面几个具体 ...
- Deep Neural Networks for YouTube Recommendations YouTube的经典推荐框架
https://zhuanlan.zhihu.com/p/52169807 王喆大佬的讲解
- SpringBoot项目 @Value("${}") 引入的配置文件的变量不生效 , 需要重启服务才生效解决方案
最近在开发项目的时候遇到的问题,有的变量需要能动态修改,于是决定把该常量放在配置文件中,以后修改配置文件就行了,但是在修改了配置文件的数据之后获取的还是之前的数据,需要重启服务才生效,怎么决解这个问题 ...
- .NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
2.4.6 EF Core -- 更新 状态 自动变更检测 不查询删除和更新 并发 状态 Entity State Property State Entity State Added 添加 Uncha ...
- JAVE JDK安装步骤
1.安装JDK 选择安装目录 安装过程中会出现两次 安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装在java文件夹的根目 ...
- 入门oj 6492: 小B的询问
Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L ...
- java操作HDFS相关demo(TDH,kerberos认证)
public class Test { private static Configuration conf; private static FileSystem fs; //开 ...
- netcore.ydal可能是东半球最好ORM框架
typora-copy-images-to: static ydal 项目框架介绍 可能是东半球最好netcore ORM框架,目前暂时支持mysql.mssql,其核心设计目标是开发迅速.学习简单. ...
- #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)
#3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...
- VMware 16.1虚拟机安装
VMware 16.1创建虚拟机 1.1首先打开我们安装好的VMware点击创建新的虚拟机 典型为自动安装,接口位默认 自定义安装更自由,可以把按需求选择 VMware16版本,只能选择Worksta ...