开始: 2025-07-04 17:00:00

暑假训练赛03专题:逆元,组合数,倍增算法

结束: 2025-07-04 21:00:00
当前  2025-07-17 19:25:45  类型: IOI  状态: 已经结束 

P7. 星际通信
描述

在遥远的未来,人类在银河系中建立了 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_iv_i,表示殖民地 u_iv_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
提交