双连通份量和强连通份量的总结

【双连通份量】

1、边双连通份量定义ide

在份量内的任意两个点总能够找到两条边不相同的路径互相到达。总而言之就是一个圈,正着走反着走均可以相互到达,至少只有一个点。it

2、点双连通份量的定义模板

参照上面,惟一的不一样:任意两个点能够找到一个点不一样的路径互相到达。也是一个圈,正反走均可以,至少为一个点。class

3、边、点双连通份量模板代码要注意的地方遍历

边双连通份量:方法

1.每一个节点的全部儿子遍历后才开始计算份量大小,请与点双连通相区分;统计

2.割顶只能属于一个份量,请与割边区分;(容易搞混)总结

3.要注意j是不是i的父节点;

di

点双连通份量:时间

 

1.每遍历一个儿子就计算是否有点连通份量;

2.割顶能够属于多个连通份量,请注意与割边区分;

3.当i为根节点时,至少要有两个儿子才能是割点;

 

【强连通份量】

1、定义

有向图上的环,不啰嗦,与上面两种相似,至少为一个点;

 

2、模板代码注意的地方

1.每一个点全部儿子遍历完才开始求份量;(相似边双连通份量)

2.每一个点只能属于一个份量;

 

【强连通份量和双连通份量常见的模型和问法】

双连通份量

1.给出的图是非连通图,如:

a.有一些点,一些边,加最少的边,要使得整个图变成双联通图。

大体方法:求出全部份量,把每一个份量当作一个点,统计每一个点的度,有一个度为一则cnt加1,答案为(cnt+1)/2;

b.有一些点,一些边,问最少多少个点单着。

大体方法:求出全部的份量便可,但要注意不一样的题可能有特殊要求(如圆桌骑士要求奇圈,要用到二分图断定)

c.各类变式问题

 

2.给出的图是连通图,如:

a.给定一个起点一个终点,求各类问题是否能实现。

大体方法:求出全部份量,并把每一个份量当成点,因而问题获得化简;

b.给一个图,而后有大量的离线回答。

大体方法:求出全部份量,再求出上下子树的信息;

c.各类变式问题;

 

强连通份量

1.给出的是非连通图,如:

a.有一些点,一些有向边,求至少加多少边使任意两个点可相互到达

大体方法:求出全部的份量,缩点,分别求出出度入度为0的点的数量,取多的为答案;

b.有一些点,一些有向边,求在这个图上走一条路最多能够通过多少个点

大体方法:求出全部的份量,缩点,造成一个或多个DAG图,而后作DAG上的dp

c.有一些点,一些有向边,给出一些特殊点,求终点是特殊点的最长的一条路

大体方法:求出全部份量,并标记哪些份量有特殊点,而后也是DAG的dp

 

2.给出的是连通图,比较少,有也比较简单

----------------------------------------------------------------

总结:

1.遇到非连通图几乎能够确定是要求连通份量,不管是无向仍是有向图;(能够节约大量思考时间)

2.凡是对边、点的操做,在同一个份量内任意一个点效果相同的,几乎都是缩点解决问题;再粗暴点,几乎求了连通份量都要缩点;

3.必定要考虑特殊状况,如整个图是一个连通份量等(考虑到了就有10-20分);

4.对于双连通份量要分析是边仍是点双连通份量;经过题目来判断;

5.拿到题目要先搞清楚给的是连通图仍是非连通图。