题干:

题目描述 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

解题报告:

裸题模板不解释了。。。注意输出的时候有空格、、、他这个样例体现不出来、、开了个num数组记录

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;
vector<int> vv[MAX];
int dp[MAX],sum[MAX];
int n;
int dfs(int cur,int root) {int up = vv[cur].size();int res = 1,tmp;//if(up == 1) return 1;for(int i = 0; i<up; i++) {int v = vv[cur][i];if(v == root) continue;tmp = dfs(v,cur);dp[cur] = max(dp[cur],tmp);res += tmp;}dp[cur] = max(dp[cur],n-res);return sum[cur] = res;
}
int main()
{while(~scanf("%d",&n)) {for(int i = 1; i<=n; i++) vv[i].clear(),dp[i]=1;for(int i = 1; i<=n-1; i++) {int x,y;scanf("%d%d",&x,&y);vv[x].pb(y);vv[y].pb(x);}dfs(1,-1);int minn = 0x3f3f3f3f;for(int i = 1; i<=n; i++) {minn = min(minn,dp[i]);}int cnt = 0,flag = 0;for(int i = 1; i<=n; i++) {if(dp[i] == minn ) cnt++;}printf("%d %d\n",minn ,cnt);for(int i = 1; i<=n; i++) {if(dp[i] == minn ) {if(flag != 0) putchar(' ');flag=1;printf("%d",i);}}printf("\n");}return 0 ;}

【CodeVS - 3639】(树的重心模板,裸题)相关推荐

  1. POJ3107 Godfather树的重心

    POJ3107 Godfather 树的重心模板题 讲解在注释里,树的重心还是比较好理解的 #include<cstdio> #include<iostream> using ...

  2. POJ1655 树重心模板题

    传送门 树重心:树的重心也叫树的质心.对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小.换句话说,删除这个点后最大连通块(一定是树)的结点数最小. 树重心 ...

  3. 模板 - 树上问题(树的直径、动态查询树的直径、树的重心)

    整理的算法模板合集: ACM模板 目录 一.树的直径 树形DP 两次DFS / BFS(找到直径的两个端点) 二.动态修改树的边权并求每个时刻的直径(线段树) 三.树的重心 一.树的直径 树的直径满足 ...

  4. 最大流问题模板-java-蓝桥杯-算法训练-网络流裸题

    1. 本题相关资料 题目链接 这是一道求最大流的模板题. 最大流预备知识:dfs,bfs,图论基础(图的存储). 网上已经有很多最大流的解析,我就不再唠叨了,还不了解的同学可参考这个博客:什么是最大流 ...

  5. HDU1166 敌兵布阵(树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. hdu1166敌兵布阵 树状数组裸题

    树状数组裸题 动态更新区间内的点,动态查询区间和 敌兵布阵 ac代码 #include<iostream> #include<algorithm> #include<cs ...

  7. 拓扑排序——家谱树(裸题)

    门门果实:家谱树 思路:鉴定为--纯纯的裸题 代码: #include <cstdio> #include <cstring> #include <iostream> ...

  8. 洛谷P3384 - 树链剖分(树链剖分模板题)

    题目链接 https://www.luogu.org/problemnew/show/P3384 [描述] 树链剖分模板题,记一下板子 #include<bits/stdc++.h> #d ...

  9. UVA 12086 Potentiometers(线段树裸题)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

最新文章

  1. 最小割 ---- 二分图最大独立集(集合冲突模型) ---- 骑士共存 方格取数(网络流24题)
  2. 论文笔记 DNorm: disease name normalization with pairwise learning to rank
  3. sklearn 相似度矩阵_精简易懂,30 分钟学会 SVD 矩阵分解,很强!
  4. Windows学习总结(6)——MindManager新手入门教程
  5. druid删除数据_Apache druid 删除数据流程 0.13
  6. NeurIPS | 谷歌使用机器学习如何做好分布外异常检测
  7. Mysql 在DOS窗口下的操作
  8. Ajax--同源策略,jsonp跨域传输原理(callback),
  9. GPU Pro 2 ------ Volume Decals
  10. 轻量级持久存储系统 MemcacheDB
  11. json for java
  12. 江苏专转本计算机考试模拟试卷,江苏专转本计算机模拟试题 11
  13. java 释放对象_java基础:对象的销毁
  14. ppt使用vba编写倒计时_在Office VBA宏中使用计时器
  15. JavaEE 使用Filter实现敏感词汇过滤器
  16. 2022年高压电工考试模拟100题及在线模拟考试
  17. 弱监督学习总结(1)
  18. 计算机视觉将打造中国技术的“胜利者效应”
  19. 实验吧-加了料的报错注入
  20. 局域网计算机间的传输介质,计算机局域网知识点:传输介质

热门文章

  1. [Leetcode][第557题][JAVA][反转字符串中的单词 III][遍历][String函数]
  2. [剑指offer][JAVA]面试题第[07]题[重建二叉树][递归]
  3. 程序安装mysql数据库_安装Mysql数据库
  4. c语言笔记之数组和指针(初学者)
  5. ext4fs error mysql_请教一个 Linux 挂在磁盘阵列报错 EXT4-fs error 问题
  6. android 交叉编译so,Android交叉编译htop和使用方法
  7. 计算机过程控制系统教材,过程控制系统-样章试读.PDF
  8. js 正则中冒号代表什么_javascript中正则表达式语法详解
  9. __builtin_expect详解
  10. MULTI BIN的wince 5.0,smdk2440下的实现