hdu6109(并查集+set/倍增)
Posted 人活着就是为了Chelly
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6109(并查集+set/倍增)相关的知识,希望对你有一定的参考价值。
题目
http://acm.hdu.edu.cn/showproblem.php?pid=6109
分析
对于相同的条件,明显直接并查集
对于不同的条件,可以用set来保存,并查集合并的时候也要对set启发式合并
还有另一种很奇妙的做法
如果我们只考虑一段[l..r]是否可行,那么我们可以离线,先挑出相同的条件构出并查集,然后对所有的不同条件进行判断就行了
这样我们就可以写出一个时间复杂度为O(r-l)的check(l,r)
那我们怎么分段呢?
我们对于当前起点now,进行倍增寻找长度最小的L(L=2^k)使得[now...now+L]这一段不能构成一段
然后我们再对[now..now+L]进行二分寻找准确的分界点
时间复杂度O(nlogn)
以上是关于hdu6109(并查集+set/倍增)的主要内容,如果未能解决你的问题,请参考以下文章
HDU 6109 数据分割 并查集 (2017"百度之星"程序设计大赛 - 初赛(A))
HDU2874 Connections between cities(并查集+倍增LCA算法求森林最短路)
HDU 4879 ZCC loves march (并查集,set,map)