题目描述

有一个村庄居住着 n 个村民,有 n−1 条路径使得这 n 个村民的家联通,每条路径的长度都为 1。现在村长希望在某个村民家中召开一场会议,村长希望所有村民到会议地点的距离之和最小,那么村长应该要把会议地点设置在哪个村民的家中,并且这个距离总和最小是多少?若有多个节点都满足条件,则选择节点编号最小的那个点。

输入格式

第一行,一个数 n,表示有 n 个村民。

接下来 n−1 行,每行两个数字 a 和 b,表示村民 a 的家和村民 b 的家之间存在一条路径。

输出格式

一行输出两个数字 x 和 y。

x 表示村长将会在哪个村民家中举办会议。

y 表示距离之和的最小值。

输入输出样例

输入 #1

4
1 2
2 3
3 4

输出 #1

2 4

说明/提示

数据范围

对于 70% 数据 n≤1e3。

对于 100 数据 n≤5e4。

板题 ,所以直接上代码了

下面代码可以直接当板子使用 (:

ps:求 所有点到重心距离的和 也可以用bfs得到答案

AC代码如下:

//树的最小重心点+所有点到重心距离的和
//链式前向星板
#include <bits/stdc++.h>using namespace std;
const int maxn = 5e4 + 1;
int n, ans, a, b, sum, d[maxn], dis[maxn];
int inf = 1e9;
vector<int> g[maxn];
queue<int> q;
bool vis[maxn];void dfs(int s, int f)
{d[s] = 1;int res = 0;for (int i = 0; i < g[s].size(); i++){if (g[s][i] == f)//跑到直接的父亲continue;dfs(g[s][i], s);d[s] += d[g[s][i]];res = max(res, d[g[s][i]]);}res = max(res, n - d[s]);if (res < inf || (res == inf && ans > s)){inf = res;ans = s;}
}int main()
{ios::sync_with_stdio(0);cin >> n;for (int i = 0; i < n - 1; i++){cin >> a >> b;g[a].push_back(b);g[b].push_back(a);}dfs(1, 0);q.push(ans);while (!q.empty()){int e = q.front();q.pop();vis[e] = true;sum += dis[e];for (int i = 0; i < g[e].size(); i++){if (!vis[g[e][i]]){q.push(g[e][i]);dis[g[e][i]] = dis[e] + 1;}}}printf("%d %d", ans, sum);return 0;
}

P1395 会议[链式前向星板](树的最小重心点+所有点到重心距离的和)相关推荐

  1. 【数据结构】链表(含链式前向星)

      链表为什么断不了?是拿振金做的吗?   说了队列,说了栈,无论什么数据结构都离不开只能按一定顺序储存的结果,向特定位置加入某值的复杂度达不到O(1)O(1)O(1).天空一声巨响,链表闪亮登场 链 ...

  2. Balkan2007]Toponyms[链式前向星建字典树+getchar()读入优化]

    思路容易想,卡空间和时间就吐了 用链式前向星压缩空间,用getchar()一位一位读加快读入 #include <iostream> #include <cstdio> #in ...

  3. P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐

    题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...

  4. P1155 双栈排序(二分图的染色判断+链式前向星)

    P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...

  5. 邻接表存储(链式前向星)

    细节 链式前向星: head[i] 存储顶点i当前出边的编号 to[num] 存储当前出边的终点 w[num] 存储当前出边的权值 next[num] 存储上一条从顶点i出发的边的边号 N个顶点对应N ...

  6. 可持久化链表(链式前向星)

    http://codeforces.com/group/aUVPeyEnI2/contest/229670 1 /******************************************* ...

  7. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

  8. 图的存储 邻接矩阵+邻接表+链式前向星

    图的存储 - 邻接矩阵 在树的问题中,邻接矩阵是空间.时间的极大浪费. 假设树的结点个数为 N = 100000. 建立邻接矩阵需要空间为 1e5*1e5 但是由于只有 N - 1 条边,所以在邻接矩 ...

  9. 图的储存方式,链式前向星最简单实现方式 (边集数组)

    对于图来说,储存方式无非就是邻接矩阵.邻接表,今天看了看链式前向星的储存方式,说来说去不还是链表,是一种链表的简单的实现方式,还是比较好理解的.看他们写个结构体,个人不喜欢,没必要,也嫌麻烦,换一种更 ...

最新文章

  1. META Header
  2. A - Wireless Network POJ - 2236
  3. Oculus和虚拟现实的无限可能
  4. javascript运行过程中的“预编译阶段”和“执行阶段”
  5. linux怎么调用静态库,Linux 静态库的创建和使用
  6. 1050 循环数组最大子段和
  7. Hive的列分隔符和行分隔符
  8. CString原理介绍
  9. 游戏化设计:平台用户激励系统——互联网平台建设...
  10. 序列化:protobuf原理
  11. python实现列表的排列和组合
  12. python数据集_在Python中如何差分时间序列数据集
  13. 2017iOS开发最新的打包测试步骤(亲测)
  14. Redis的数据类型(对象)
  15. 过程FMEA步骤四:失效分析(一)
  16. windows xp 自动关机命令
  17. python开平方计算(求平方根)
  18. supersu二进制更新安装失败_supersu二进制更新失败怎么办 supersu二进制更新失败解决方法...
  19. 解决或者设置网页变灰-CSS-filter属性-哀悼
  20. 2023四省联考 数学 题解

热门文章

  1. C语言,利用递归调用函数求年龄问题 问题描述:有5个人坐在一起,问第5个人多少岁,他说比第4个人大2岁。问第4个人多少岁,他说比第3那个人大2岁。问第3个人多少岁,他说比第2个人大2岁。求5人年龄
  2. Springboot Freemarker 将模板放在jar包外面
  3. java UDP 使用示例
  4. Vue 调试工具 vue-devtools 安装及使用
  5. 【网站】给网站添加一个夜间模式切换按钮
  6. mysql 不显示消息错误_如何编写不吸的错误消息
  7. reddit_Reddit如何大规模构建功能:采访其工程副总裁
  8. wxml代码支持js代码吗_如何取胜:代码支持者的建议
  9. PAT:组个最小数(C++)
  10. 导出Oracle数据库字典