CF竞赛题目讲解_CF487E(线段树 + 树链剖分+ Tarjan算法)
2022-09-20 10:50 作者:Clayton_Zhou | 我要投稿
https://codeforces.com/problemset/problem/487/E
题意:
已知一张n个点m条边的图,每个点有点权,我们有q次操作,有两种操作,
第一种是改变一个点的点权;第二种是询问两点之间可能走过的简单路径中的所有点的最小点权。
n,m,q都是1e5量级。
题解:
遇到这种图上简单路径问题应该考虑建出圆方树,使用Tarjan算法。
每个方点用一个multiset维护权重。
对于每个方点,只维护方点儿子的最小值,不维护方点父亲的值。
对于所有方点,不去维护它在圆方树上的父亲,那么对于每一次修改,只会波及它在圆方树上的方点父亲。
在圆方树上,两圆点之间的唯一路径一定经过最近公共祖先。
而如果在某一次询问中两点之间的最近公共祖先(LCA)为方点,
还需要额外考虑这个点的父亲的权值。
最后树链剖分加线段树维护最小值。