首页 > 代码库 > 圆方树学习
圆方树学习
圆方树是一种数据结构。
这个东西原始的出处应该是paper
《Maintaining bridge-connected and biconnected components on-line》
tarjan和另外一个人写的...当时叫forest data structure
然后这个东西似乎已经流行很久了?http://blog.csdn.net/PoPoQQQ/article/details/49513819
cjk大爷最近发了一篇博客写这个:http://immortalco.blog.uoj.ac/blog/1955
这篇里的例题啊啥的都是cjk大爷的
首先圆方树是用来解决静态仙人掌问题的。
(这里的静态仙人掌是说仙人掌不会活动,没有link啊,cut啊啥的)
比如开始有一个这样的仙人掌:
可以发现这张图上有两个环,哪两个就不说了。
我们把图上的每个环单独当做一个点,我们叫这些新点方点,原来的点叫原点,然后把原来的环连成一个菊花,我们就有了一棵美观的圆方树!
啊圆方树就是这么简单的一个东西。
首先怎么建这个圆方树?
我们在仙人掌上面跑tarjan,我们考虑x的一条出边x->b(出边就是说x比b先访问到),那么如果dfn[x]<=low[b],我们发现我们找到了一个环。
(需要注意的是,这里的环可能只是一条边,要特判掉)
此时我们维护一个栈,一直弹栈,弹到b停下,加上x就组成了一个环。
此时我们可以发现弹栈的顺序正好组成了环一圈的顺序,并且正好是倒着的dfs序。
那我们倒过来(当然不倒你舒服也行),就可以二分找一个点在环上什么位置了。
然后我们可以把这些东西拿一坨vector存下来...圆方树就建好啦~
由于比较弱只写了前面的几题...还是比较好写的...
擦这么晚了明天再来更
圆方树学习