bzoj 2001: [Hnoi2010]City 城市建设

来源:互联网 发布:上海淘宝客服招聘 编辑:程序博客网 时间:2024/06/06 01:37

前言

这题我没有打
要是想要偷代码的就可以移步了
主要是不是很想打,看懂了思路就没打了,来口糊一下做法,来假装自己AC了
最近蛮喜欢做分治题的,感觉挺神奇的
我觉得分治这个想法省时间的原因是他将很多信息并在了一起搞,将重复计算的都只算了一次,所以特别快
于是就开了这一个题

题解

这题考虑分治
考虑对询问进行分治
对于L~R这一个区间
很显然的,有很多边是已经确定了的,也就是1~L-1和R+1~n
我们不妨把这些边都弄出来
不难想到,这时候有哪些边一定要,或者一定不要已经确定了
我们先把L~R这些边标为一定要选,然后做一次最小生成树
那么这时,在树上的边,除了L~R这些,就肯定都是必选的
于是把他们选上,缩点
相反的,我们把L~R这些边标为一定不选,然后做一次最小生成树
那么这时,不是树上的边,除了L~R,就肯定都是不能选的
于是把他们都提出准备递归的边集
然后不断分治
最后到达L,R的时候,把剩下的边集做一次最小生成树就可以了

时间复杂度分析

对于每一个L~R,它最多连接(R-L+1)*2个点
也就是说没确定连通关系的最多只有这么多连通块
于是我们剩下的图的点数在缩完点之后就只有(R-L+1)*2个了
那么已经选择的边数也是知道的
由于第二步,我们也可以把有可能的边集缩小为R-L+1条
那么时间复杂度大概就是
O(n)=O(n/2)+nlogn
大概就是O(nlogn)的复杂度了

代码实现

没有,自己上网抄一个。。

原创粉丝点击