很显然,学过了LCT,大家一定都会用LCT来维护动态树结构了

那么,遇到图问题的时候,是不是也能用lct来解决呢?

解决图问题的时候,我们必须要仍然维护一棵树的形态,否则,lct是做不动的

那么下面来看几道题目

<br >

代码戳这里

<br >

密码: s5qx

1、Codeforces gym 100551A

  • x y 增加x、y的边

  • x y 去掉x、y的边

? 询问图中的联通块数量

显然,没操作前,答案是n

考虑加边

不连通,直接连接,答案减一

连通,并且(u, v)的删除时间比u -> v链上的最早删除时间边大,断开最小边,连接u -> v。

连通,并且(u, v)的删除时间小于等于u -> v链上的最早删除时间边,直接无视。

删边操作

如果u, v是树边

断开u, v,答案加一。因为当前边是已经加入的边里面删除时间最迟的,能够连接u, v的其他边要么已经被删除,要么还没被加入,所以可以放心地答案加一。

u, v不是树边,无视就好,对答案没有影响

2、Codeforces gym 100551B

首先要知道图论中桥的定义:删掉它之后,图必然会分裂为两个或两个以上的子图

那么,这道题目的处理方法就显得比较简单了

因为只有加边,我们对于每一次加边

如果x,y不连通,那么我要要在边上打上标记

如果x,y本来就联通,那么我们要减去x,y链上的所有标记,然后将标记清0

清0的时候,类似rev的方式,打延迟标记即可

3、Codeforces gym 100551E

给出一张图,每次询问删去一组边,询问是否仍为连通图

对于每组询问,前面为删除操作,后面为加入操作(还原),中间在加一个询问操作

然后就规约成了A....直接刚

bzoj3237与这道题目一模一样,甚至连数据范围都一样........