欢迎光临散文网 会员登陆 & 注册

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)为方点,

还需要额外考虑这个点的父亲的权值。


最后树链剖分加线段树维护最小值。


CF竞赛题目讲解_CF487E(线段树 + 树链剖分+ Tarjan算法)的评论 (共 条)

分享到微博请遵守国家法律