[NOI2014]魔法森林
魔法森林
题解
看到这道题应该是很容易想到贪心,我们可以先将所有边根据值排序,再当前基础上找到所需
值最小的一条路径。
但是由于边会产生改变,于是每次都要跑一遍最短路,明显是会T飞的。
很容易发现,当前加入的一条边只对部分的路径产生影响,而这些路径都是在已有路径的最小生成树上构成一个环的。由于当前到每个点的最优路径都会对以后的答案产生影响,所以我们要实时维护当前最小生成树的形态。
每次加入边时如果这个环上最劣的边比加入的这条边值更大,就将其删去,再加入当前边。于是我们就需要用LCT来维护这棵最小生成树。
但是于此同时我们如何维护兩(两)点之间连得边呢?我们可以将这些边建成虚点,每次连接就将两个端点连到虚点上,这样就不需要每次更改后都很麻烦的维护点权了,因为每次修改后点的父子关系都是会变的。
这样每次加入边后都维护出当前最优值,答案就是它们中最小的。
时间复杂度

浙公网安备 33010602011771号