会议(树上最小距离和点)


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

There are no comments at the moment.