连通图任意两点间路径唯一,那么肯定是树,不然就会有圈
如果没有动态的修改边权的操作,就是简单的LCA问题了
现在加入动态操作后,如果修改(u,v)这条边,且不妨设u是v的父节点,那么以v为根的子树中所有节点的dis值都会改变
我们可以用树状数组来维护这个改变的del值
首先,将LCA转化成RMQ问题,这样我们求得了一个dfs顺序的欧拉序列,和对应的深度序列,还有一个每个节点第一次被访问的时间h[i],我们再多记录一个每个节点它的子树被访问完时的时间end[i],这样,修改(u,v)这条边,且u是v的父节点的话,处于[h[v],end[v]]这个时间段的所有节点的dis值都改变了del,用树状数组维护就行,update(h[v],del),update(end[v]+1,-del),一开始end[v]后面没有+1,wa了好久=。=
代码: