圆方

圆方树浅谈

此生再无相见时 提交于 2019-12-05 01:48:08
圆方树浅谈   在联赛过后我又开始更博客啦。 一、前置知识点   首先在学习圆方树之前,要先有一些图论的基础,要先学会$tarjan$求点双。 二、仙人掌浅谈   首先先定义一下什么是仙人掌图。仙人掌图满足两个性质:性质一,仙人掌图是一个无向连通图。性质二,仙人掌图中的任意一条边最多存在于一个环中。借用$bzoj$的图来解释会清晰一点。   我们考虑仙人掌图具有什么性质,将仙人掌图的$dfs$树取出,我们可以得到一课挂满非树边的树,这些非树边一定不相交。对于这个性质,我们可以解决一类问题,例如仙人掌的最大独立集问题。例题: bzoj4316: 小c的独立集   我们考虑上述的性质,即仙人掌中任意两条非树边不相交。因为上述性质我们可以知道,在求最大独立集的时候,任意两个环可以做到互不影响。所以我们可以先考虑不在环上的点,在将一个环上所有的点所引出的子树都考虑结束的时候,考虑整个环。我们设状态$f[i][0/1]$,表示对于$i$号点的子树中,第$i$号点选择/不选择的最大独立集大小是多少。现在我们考虑转移,对于一条树边,我们直接按照求树的最大独立集那样转移就可以。若不是树边,我们先不转移。由于每一个点是在处理完所有的子树内的点之后再被处理,所以我们发现,若现在要处理的是一个环的顶点(对于一个环的顶点的定义为这个环中最先遍历到的点),这个环上其他的所有点除了由当前环转移的部分

tarjan等

笑着哭i 提交于 2019-11-27 03:52:06
有向图注意v 在 栈中时,才用dfn更新low。无向图不用判断这个。 SCC和边双,都是在返回时判断low==dfn。 点双就是找割点,low(v)>=dfn(u)时,把tarjan(v)过程中放入栈的点以及u加入点双。 一个点可能位于多个点双。 割点为>=,割边为> 。 点双要特判根。 圆方树圆圆边就是割边。 圆方树要把边开够(n×2+m×4)。 来源: https://www.cnblogs.com/lnzwz/p/11342899.html