会议(树上最小距离和点)
Submit solution
Points:
100
Time limit:
1.0s
Memory limit:
80M
Author:
Problem type
Allowed languages
C, C++
会议(树上最小距离和点)
题目描述
有一个村庄居住着 \(n\) 个村民,村民的住所通过 \(n-1\) 条路径相连,形成一棵树;每条路径长度均为 \(1\)。 村长希望选择某个村民的家召开会议,使得所有村民到会议地点的距离之和最小。若有多个最优地点,则选择编号最小的那个。
输入格式
- 第一行:一个整数 \(n\),表示村民数量。
- 接下来 \(n-1\) 行:每行两个整数 \(a, b\),表示 \(a\) 与 \(b\) 之间有一条路径。
输出格式
输出一行两个整数 \(x, y\):
- \(x\) 表示举办会议的村民编号(若并列取编号最小者);
- \(y\) 表示在该地点时,所有村民到会议地点的距离之和的最小值。
样例
输入
4
1 2
2 3
3 4
输出
2 4
说明/提示
- 图为树结构,路径长度均为 \(1\)。
- 当存在多个最优会议地点时,输出编号最小的节点。
数据范围
- 对于 \(70%\) 的数据:\(n \le 10^3\)。
- 对于 \(100%\) 的数据:\(n \le 5 \times 10^4\)。
建议实现时使用 \(long\) \(long\) 存储距离和,以防止溢出。
Comments