线段树分治
绪论
这个算法借助线段树,然后事实上是通过遍历线段树进行分治。
先用一种比较容易的方式来解释吧。
先回忆天天爱跑步一类的题目,大致就是在一棵树上通过DFS,访问到这个点的时候把这个点上的操作加入贡献,离开的时候除去贡献,然后就可以了。当我们发现一个操作不能只用一个点来表示,也即,两个操作有交却又不完全包含,就把两个操作有相交的属性(通常是时间)作为线段树的索引对象,然后把每个操作拆分成 \(log\) 个操作,然后就可以套用前面说的方法了(当然维护方法有所不同)。
例题
题面和数据范围
地理课上,老师给出了一个巨大的地图,由于世界日新月异,会有一些道路在某一时刻被删除,也会有一些道路在某一时刻被修建。这里的道路均为双向的。老师认为,有一些城市被分在了一个连通块中可以相互到达,而有一些城市不能够相互到达。而他想知道,每个时刻所有连通块大小的乘积是多少?小A看到这个地图的时候就蒙了,还好那只上天的喵及时帮助了他。现在他把这个清真的地图拿过来给你,想试试看你能不能求出来。由于答案可能很大,输出乘积 \(\mod 10^9+7\) 即可。
\(n,m\leq 100000\) ,保证无重边、自环。
解法
显然,先按照之前的部分把每个询问放到树上,然后对整棵线段树做一次DFS,然后用可撤销并查集维护一下,就能得到答案。
另外的
相关推荐
  安在信息安全新媒体    2018-01-13  
   Dyancsdn    2020-07-28  
   baike    2020-07-04  
   henryzhihua    2020-06-10  
   starletkiss    2020-05-27  
   starletkiss    2020-05-26  
   lickylin    2020-04-08  
   wellfly    2020-03-08  
   waitwolf    2019-12-19  
   kuoying    2019-11-12  
   kuoying    2019-11-05  
   范范    2019-11-03  
   kuoying    2019-11-02  
   lickylin    2019-06-28  
   木易电影    2018-05-17  
   玲珑    2018-03-04  
   玲珑    2018-02-12  
   美国教育漫谈bgu    2017-12-28