由于是一棵树,所以将 (u,v) 这条边删除后,树就被拆分为两棵树。
接着分别以 u 和 v 为根对两棵子树 dfs 求出最大深度即可。
时间复杂度:O(n)
一家通信公司在某地区铺设了一张光纤网络,网络中共有 n 个基站,由 n−1 条光缆连接。网络连通且不存在环路,任意两个基站之间都有唯一的一条通信路径。
工程师注意到网络中的一条光缆格外重要,他想要评估这条光缆的承载压力。在所有一定会使用到这条光缆的通信路径中(路径上不允许重复经过同一个基站),最远的一条路径会经过多少条光缆?请你帮忙计算这个数值。
数据约束:基站总数 n 满足 2≤n≤105,所有基站的编号为 1 到 n。输入数据保证构成一棵合法的树,且被选定的光缆一定是网络上存在的一条边。
输入共三行,均采用标准输入。 第一行包含一个整数 n,表示基站的数量。 第二行包含 n−1 个用空格分隔的整数,其中第 i 个整数 ai 表示基站 i+1 与基站 ai 之间存在一条光缆(1≤ai≤n)。 第三行包含两个整数 u 和 v,表示被选定的这条光缆两端的基站编号(1≤u,v≤n,ueqv)。数据保证 (u,v) 是网络上的一条边。
输出一个整数,表示在所有必经过选定光缆的无重复节点的路径中,最长的路径所包含的光缆条数。
输入
2
1
1 2
输出
1
说明
网络只有 2 个基站,光缆为 (1,2)。选定光缆即为 (1,2),必须经过该光缆的简单路径仅此一条,包含 1 条光缆。
输入
3
1 2
1 2
输出
2
说明
网络为链 1–2–3,选定光缆 (1,2)。从基站 1 出发不经过 2 没有其他节点,距离为 0;从基站 2 出发不经过 1 可以到达 3,距离为 1。加上光缆 (1,2) 本身,最长路径包含 0+1+1=2 条光缆,对应路径 1–2–3。
输入
5
1 1 1 1
1 2
输出
2
说明
网络为星型,中心基站 1 连接 2,3,4,5。选定光缆 (1,2)。从 1 出发不经过 2 可到达 3,4,5 中的任一,最远距离为 1;从 2 出发不经过 1 无其他节点,距离为 0。因此最长路径包含 1+0+1=2 条光缆,例如路径 3–1–2。
输入
6
1 2 3 4 5
3 4
输出
5
说明
网络为链 1–2–3–4–5–6。选定光缆 (3,4)。从 3 出发向左不经过 4 可到达最远节点 1,距离为 2;从 4 出发向右不经过 3 可到达最远节点 6,距离为 2。加上光缆 (3,4) 本身,最长路径包含 2+2+1=5 条光缆,即整条链。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册