#sXDPybttg050207. 1581:旅游规划
1581:旅游规划
好的,我将这道题整理为清晰的题面格式,并补充样例解释、数据范围与时空限制:
题目描述
W 市的交通规划出现了重大问题,市政府下定决心在全市各大交通路口安排疏导员来疏导密集的车流。但由于人员不足,W 市市长决定只在最需要安排人员的路口安排人员。
具体来说,W 市的交通网络十分简单,由 个交叉路口和 条街道构成,交叉路口编号依次为 。任意一条街道连接两个交叉路口,且任意两个交叉路口间都存在一条路径互相连接(即该交通网络是一棵树)。
经过长期调查,结果显示,如果一个交叉路口位于 W 市交通网最长路径上,那么这个路口必定拥挤不堪。所谓最长路径,定义为某条路径 ,路径经过的路口各不相同,且城市中不存在长度大于 的路径(即最长路径是树的直径)。因此最长路径可能不唯一。W 市市长想知道哪些路口位于城市交通网的最长路径上。
输入格式
第一行一个整数 ;
之后 行,每行两个整数 ,表示 和 的路口间存在着一条街道。
输出格式
输出包括若干行,每行包括一个整数——某个位于最长路径上的路口编号。为了确保解唯一,请将所有最长路径上的路口编号按编号顺序由小到大依次输出。
样例
样例输入
10
0 1
0 2
0 4
0 6
0 7
1 3
2 5
4 8
6 9
样例输出
0
1
2
3
4
5
6
8
9
样例解释
给定的树结构:
0
/ | | \ \
1 2 4 6 7
| | |
3 5 8
|
9
节点0连接1,2,4,6,7,节点1连接3,节点2连接5,节点4连接8,节点6连接9。
树的最长路径(直径)为:3-1-0-2-5 或 9-6-0-2-5 或 8-4-0-2-5 等,长度都是4(边数)。
实际上这棵树的直径长度为4,直径的端点有多个:3,5,8,9。
所有在任意一条直径上的节点都要输出,按编号顺序排序后得到: 0,1,2,3,4,5,6,8,9
(节点7不在任何一条直径上,所以不输出)
数据范围
对于 的数据,。
时空限制
- 时间:
- 内存:
提示
此题要求找出树的所有直径上的节点。
步骤:
- 找直径的一个端点 :从任意节点(如0)出发DFS/BFS找到最远点 ;
- 找直径的另一个端点 :从 出发DFS/BFS找到最远点 ,并记录每个节点到 的距离 ;
- 从 出发DFS/BFS得到每个节点到 的距离 ;
- 直径长度 ;
- 节点 在直径上当且仅当 。
证明:对于任意节点 ,如果它在某条直径上,那么 ;反之如果 ,则 在 到 的路径上,而 到 是直径,因此 在直径上。
这样我们可以在 时间内找出所有直径上的节点,并按编号排序输出。