## BJOI2019

## SDOI2019

### SDOI2019世界地图

标签:虚树 ,MST

这题不太好做.

首先,可以预处理出由 $1$ ~ $i$ 列构成的最小生成树.

预处理的时候我们发现要将 $i$ 这一列连到 $1$ ~ $i-1$ 的虚树中.

而 $i$ 与 $i-1$ 只有 $n$ 条边,这 $n$ 条边又仅影响两两点对间路径上的最大值.

所以我们可以只把 $i-1$ 列的点提取出来构成一颗虚树,让这颗虚树去和 $i$ 列合并.

合并操作是容易的:由于边很少,所以我们可以直接把边都拿出来,然后跑一个 $kruskal$.

跑出来后,再把 $i$ 列的点标记为关键节点,然后再求一个虚树.

然后更新新的虚树的权和:显然就是 prefix[i-1]+sum[i]-key[i-1]-key[i]+key[newtree]

对于询问的时候也是同理.

然后预处理的时候空间复杂度是 $O(m \times n)$ 的,每一次处理询问的复杂度是 $O(n \log n)$ 左右吧.