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.拿到題目要先搞清楚給的是連通圖仍是非連通圖。