雪之国度有 座城市,依次编号为 到 ,又有 条道路连接了其中的城市,每一条道路都连接了不同的 个城市,任何两座不同的城市之间可能不止一条道路。
雪之女王赋予了每一座城市不同的能量,其中第 座城市被赋予的能量为 。如果城市 和 之间有一条道路,那么只要此刻雪之女王的能量不小于 ,这条道路就是安全的。如果城市 和 之间存在两条没有重复道路的安全路径(其中每一段道路都是安全的),则认为这两座城市之间有着良好的贸易关系。
最近,雪之女王因为情感问题,她的能量产生巨大的波动。为了维持雪之国度的经济贸易,她希望你能帮忙对 对城市进行调查。
对于第 对城市 和 ,她希望知道在保证这两座城市之间有着良好贸易关系的前提之下,自己最少需要保持多少的能量。
Constraints
, , ,
Solution
城市间存在两条没有重复道路的安全路径,即两座城市在同一个边双里。题意可以转化为,在保证两个城市在同一个边双联通分量的情况下,求最大边权的最小值。很容易想到一种做法:将边按照边权从小到大加入直到两座城市在同一个边双里。
首先构造出原图的最小生成树,然后考虑按照边权从小到大加入非树边。考虑加进一条非树边会造成的影响:在加入非树边 时, 到 的简单路径上的所有点都会被缩进一个边双联通分量里,这时候我们可以给路径上的所有点打上这条非树边边权的标记,代表这个点与其父亲第一次进入同一个边双时该边双的最大边权。然后利用并查集将路径上的所有点缩成一个点,避免已更新过的点被重复更新。
现在考虑处理询问。利用并查集可以直接判断两个点最后是否在同一个边双里。若在,则答案为 和 路径上的除 外节点标记最大值。
具体可以用倍增来实现,时间复杂度 。
Code
1 |
|