图论进阶总结 【第三部分 Tarjan与连通性】

图论进阶总结 【第三部分 Tarjan与连通性】

阅读之前,读者应该很清楚Tarjan算法的实现流程,故不赘述。

1.无向图连通性

在无向图连通性这一方面主要就研究这样几个对象:

  • 连通块

这个可以使用并查集进行维护,不再多说

  • 割边、割点、环、双连通分量

这些就要使用Tarjan算法来求解

所以Tarjan是一个解决这些问题的一个统一的方法,那么它是如何解决问题的?

Tarjan算法引入“时间戳”和”追溯值“的概念:

  • 时间戳,即Tarjan算法访问节点的次序

这个次序实际上随着遍历顺序的不同会有改变,因此他具体的值可能并没有太大意义

实际上这个值就是一个区分子树内外,不难发现对于无向图而言,每一条非树边都从时间戳更大的点回到更小的点,而不可能反之。如果某一个从一个点通过了非树边,那它肯定可以到达子树外面。

  • 追溯值

自然,追溯值就是至多通过一条非树边到达的最早访问的点

所以这是一个树形DP计算的过程。观察任何一个图例都可以发现,追溯值就是从这个子树出发可以到达的最早访问点。


那么,无论是割点还是割边,都是会把图分为几个部分的,不妨考虑在什么情况下才能把图分成几个部分:对于割边来说,如果其中一边的子树中有点可以到达子树外面,那么把这条边删了也不能分为两边;对于割点来说,如果子节点中的一个子树有点不可以到达子树外面,那么删除这个点至少可以将图分为两块。所以割边割点判定法则就诞生了。

不过让我们回到一切的源头,如果你面对这个问题,到底你为什么想到就是要用搜索树的性质?

科学研究的一般方法即从特殊到一般,特殊的结构就是树了,显然,上面每一条边都是割边。如果给上面再加边,就变成了一张图。为了判断这些边是否可以在删除某边/点的时候维持连通性,就需要判断这种边走向的点是在自己子树内还是外,就要明确的区分这两种点。搜索树,又是一种”不撞墙不回头的结构“,保证了时间戳的性质。

所以,有两种理解方式:

理解方式1: 利用非树边形成环,判定在环上的边不可能是桥(对于割点x,即满足任意一个子节点y都在一个简单环上的时候就判否)

理解方式2: 利用非树边到达子树外,判定子树内有点能到达子树外的就不是桥/割点

关于DCC,自不必说,这个已经明了了。


1.2 欧拉回路与欧拉路

欧拉回路判定定理:若一无向图存在欧拉回路,当且仅当无向图连通并且每个点的度是偶数

这是因为,如果每个点度都是偶数,这就说明如果进入一个节点就一定有尚未访问的边可以离开这个点。

2.有向图连通性

注意到在这里没有说什么割边、割点了,SCC的定义是可以互相到达,所以说求SCC的Tarjan算法就更加偏向我们上面第一种理解。当然,在一个联通的无向图里说互相到达那是没有意义的。所以有向图的Tarjan算法有些类似,又有些不同。

有向图的Tarjan算法就是尽量找到环(也可能是环套环)。因为有了更加强的限制,有向图Tarjan就是更加明确地找可以”返祖“的节点,然后更新追溯值。

还由于要求极大的连通子图,所以就要等到环的最上面的点再计算。

当然,求e-DCC也是可以这样操作的,加个栈就行了。

2.1 有向图的必经点与必经边

显然书上那个有向无环图求必经点、边的方法还比较好理解。

考虑必经点/边的特征:从原点到该点/边可能有许多条路径,而过后可能也有许多路径,这些很容易算出经过x的路径,然后加以对比。这是”同一法“。

2.2 2-SAT问题

之前在写并查集的时候我们说并查集是维护无向关系的,2-SAT却是一个有向关系。因为它里面的限制是”若ai=0/1或aj=0/1“,所以可以转换成"若ai不满足则aj必须满足"和”若aj不满足则ai必须满足“,这才是”原命题“、”逆否命题“,但是不能推出”若ai满足则aj必须满足/不满足“

所以条件其实要弱一点点,限制就要强一点。拆开每一个变量为2个点,分别连边。

这时候如果从a走得到b就说明由a可以推出b,其实这个是这样的逻辑。

但是如果由”a取值为1“可以推出”a取值为0“那么当然是错误的。

这个模型说明图就是来描述元素之间的影响,此处的元素即命题”ai=0/1“,运用”拆点“思想,这是一种图论建模里的常用思想。

要求解具体方案, 按照反Topo序进行确定。其实这里上面已经说过了A可达B其实指A蕴含B,所以按反Topo序中就是每次处理着没有蕴含关系、不会对其他SCC造成影响的SCC。

”确定“就是指如果选了一个SCC里的为答案。对应到一个变量的两种取值上,在反Topo序中越靠前,就会被确认为真。(显然,这其中任何一个变量的两个取值都肯定互相不可达,要不然必无解,请回顾我们上面说的逆否命题)

但是Tarjan在找LCA时是DFS过程,所以标号顺序就是反Topo序,故直接比较标号大小就简洁地解决了问题。


总结以上,Tarjan算法的基础用法就是:

  • 查找图上的割点/割边/连通性

  • 缩点

3.差分约束系统

其实差分约束和2-SAT还蛮像的,所以把它放到这里来了。

书上说其实把差分约束联系到最短路算法这里其实是因为式子”长得像“。好吧,”差分约束“即约束两个数之间差值的问题。

其实如果从比较形象的角度来理解,如果用点来表示变量,如同”差分约束“所示的那样,假如每一个 aiaj+cka_i\leq a_j + c_k 的主元都选a_j的话,那就相当于限定a_i不能大于a_j+c_k,也许限制有许多条,总之,满足a_j+c_k最小的一个肯定就满足了其他的。那这个就像最短路了。

也就是说其实求出来的解应该是(在你连的0那几条边之下的)最大解。(要求大于0那几条边的最小解应该跑最长路)

所以捋一捋,你会发现图论建图是比DP建模还要难一点的东西。

有的时候出题人卡SPFA,此时可以缩点做DP。注意不是所有情况都可以。记住缩点的原则:环里的细节信息可被忽略。下面有这样的一个例题。

4.例题

其实0/1分数规划可以这样想,就是设一个mid,然后建立一个不等式midori1ta[i]i1tb[i]mid\leq or \geq \cfrac{\sum_{i-1}^{t}a[i]}{\sum_{i-1}^{t}b[i]}

然后再化成大于小于0的形式就行了

这样逆向想比正着要好很多。

显然是差分约束。这里求大于等于1的最小解,可以连完边跑最长路。

但是SPFA被卡了emm。注意到只有两种边权0/1,那么如果一个SCC上有1就是正环无解,所以合法方案的SCC都是0,可以忽略,考虑Tarjan缩点。缩完了按Topo顺序DP

这种区间问题有约束,通常化为前缀和解决。

但是前缀和差分约束需要多添加一些限制:

  1. 要保证前缀和单调不减

  2. 每个元素只能选择一次,最多贡献1

环上的点都不重要,重要的是从一个环是不是只有一种方法走到另一个,考虑缩点。

缩点之后考虑要加几条边,对于一棵树上的两个相邻点,如果中间只有1条边那么肯定是要加的。

第一篇题解说的十分精准,我没法再给出更好的描述了:

所以就是在点集内,若选择某个点则另外的点不能选;一条边上,若不选某个点,则另一个点必选。此时已经很显然了,2-SAT建边跑强连通分量判断是否矛盾

如果限制条件中元素可以分为两类,有选与不选的两状态,有关于选择的要求就可以转化为2-SAT

但是这样的话连边太多了,非常影响效率

可以发现覆盖边的选点是不能优化的,而覆盖集合的选点每一次都必须朝部分中其他所有另外的点连边,这太多了。所以考虑建立一个点来代表另外的结点,同时加另外的边维护限制条件,这样大大地提升了效率

遇到一个环显然可以重复地把环上蘑菇采完,所以环上信息可以忽略,考虑缩点。

考虑一个合法的方案需要:骑士之间有“不憎恨”的关系且是一个奇数环形

所以在不憎恨的骑士之间建边,这是可想而知的。

然后?DCC?其实一个DCC中可能不止是一个简单环

书上的证明略。所以为什么要用v-DCC?注意到v-DCC的充要条件:

里面每一个点都在一个不自交的环中。所以如果要判断有关简单环而不只是可达的条件,用vDCC会好一点

注意到一个环里的点一定是男女交替排列,边是主次交替的,说明必是偶环,并且,可以推得如果删除了某一条边还能完美匹配,那么这条边是“非主要”边,反之则是主要边。

为了快速得到简单环而不是DCC,我们将每条边转换为有向边:主要边从B到G,次要边反之。然后求SCC,即可区分简单环与DCC。

实在不行,可以考虑把合法情况分类讨论再手模然后找结论,这还是管用。

posted @   haozexu  阅读(40)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示