码迷,mamicode.com
首页 > 其他好文 > 详细

hdu6109(并查集+set/倍增)

时间:2017-08-14 20:10:10      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:php   复杂   show   起点   这一   href   get   ...   时间复杂度   

题目

  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/倍增)

标签:php   复杂   show   起点   这一   href   get   ...   时间复杂度   

原文地址:http://www.cnblogs.com/wmrv587/p/7359660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!