dsu on tree

例题简述:在线维护一个森林(无向有权),每次操作可能是加一条边或是查询u->v的路径长度

首先,u->v路径的求法显然是lca,但是如果我们对于每一个连边操作都重新dfs一次新的联通块,那么我们的复杂度在最坏情况下有可能退化到n!这是我们不能接受的

我们仔细思考一下会发现,在被连接的两个联通快中,有一个联通块内的dis,f两个关键的数组是不会改变的

对于连边x->y,设他们的scc分别是xx,yy,siz[x]<siz[y].所以我们可以每次连边时将x的父亲定为y,将xx的scc定为yy,然后将x做为整个xx的根,然后重新将整个联通快重新dfs一遍

听起来还是很暴力对吗?,其实不然,我们可以思考一下每次合并两个联通块时,最坏的情况是两个联通块的大小相等,此时我们的时间复杂度是nlogn的

posted @   liuboom  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示