在遥远的未来,人类在银河系中建立了 n 个星际殖民地,这些殖民地通过虫洞连接形成了一个庞大的星际网络。
每个殖民地要么属于光明联邦(标记为0),要么属于黑暗帝国(标记为1)。
为了应对即将到来的星际战争,光明联邦需要找到两个殖民地:一个属于光明联邦,一个属于黑暗帝国,并且它们之间的通信延迟最大。
通信延迟与通过虫洞的数量成正比,因此你的任务是找到这两个不同阵营殖民地之间的最长路径。
这题题意很好理解,就是树上的每个节点都有自己的颜色,我们要找出两个不同颜色的节点的最远距离。
这题我们可以用两个 dfs
解决。
第一个 dfs
:
主体是一个洪泛,在洪泛过程中求出每个节点的深度。
在第一个 dfs
结束后,我们已经求出了每个节点的深度,要想要两个节点距离最远,我们就可以让其中一个节点 k 的深度尽可能的低,再向上做 dfs
,求出最远距离。
那这里我们就要分两类来讨论:
第一类,k 为白色,那我们在向上做 dfs
时就要找出一个离 k 最远的黑色节点。
第二类,k 为黑色,那我们在向上做 dfs
时就要找出一个离 k 最远的白色节点。
这样我们就可以写出第二个 dfs
,也是一个洪泛。
第一行包含一个正整数 n,表示殖民地的数量。
第二行包含 n 个整数 f_1, f_2, \dots, f_n,其中 f_i = 0 表示第 i 个殖民地属于光明联邦,f_i = 1 表示属于黑暗帝国。
接下来的 n-1 行,每行包含两个整数 u_i 和 v_i,表示殖民地 u_i 和 v_i 之间存在一条虫洞连接。
输出一个整数,表示相距最远的两个不同阵营殖民地之间的虫洞数量。
5 0 1 0 1 0 1 2 1 3 3 4 3 5
3
样例解释
最远的不同阵营殖民地对是2(黑暗帝国)和5(光明联邦),它们之间的路径经过3个虫洞:2 → 1 → 3 → 5。
时间限制 | 1 秒 |
内存限制 | 128 MB |