邊雙聯通分量

2021-07-24 07:06:25 字數 1286 閱讀 3098

首先什麼是邊雙聯通分量?

邊雙連通分量是指,在「無向圖」中刪除任意一條邊依舊聯通的聯通塊

之前講過強連通分量,這裡邊雙聯通分量的做法也需要利用tarjan演算法獲得邊雙聯通分量。

對於邊雙聯通分量中還有乙個概念,就是橋。

橋指的是 刪除該邊圖不再連通。

對應的另乙個概念是 割點

割點的的是 如果除去此節點和與其相關的邊,圖不再連通。

對於以下的圖

我們跑一邊tarjan之後所得的dfn low為:

可見在此分量中的邊一定不是橋,對於每個聯通分量,刪除任意一邊連通性不變,其中可能含有割點,

且其中的環與環不保證有公共邊,但一定至少有1個公共點。

以下為**

#include#include#include#define n 1005

using namespace std;

struct edge// 用鏈式前向星儲存

edge(int v,int next)

}ed[n*n];

int head[n],lnum;

void addline(int u,int v)//新增新邊

int index=0;

int dfn[n],low[n],sta[n],bcc[n]; //dfn用來標記dfs序時間戳 low標記該點能達到的最小的時間戳的點 bcc用來儲存 強連通分量的標號

int mark[n*n];//由於是無向圖 所以用來標記經過的邊

int top=0,bccnum=0;

void init()

void tarjan(int root)

{ dfn[root]=low[root]=++index;

sta[top++]=root;

for(int i=head[root];~i;i=ed[i].next)

{ int y=ed[i].v;

if(mark[i])continue;

mark[i]=mark[i^1]=1; //標記正向與反向邊

if(!dfn[y])

{ tarjan(y);

low[root]=min(low[y],low[root]);

if(dfn[root]

邊雙聯通分量

noip最後一次學習 敲板子 橋 如果這條邊去掉後圖的聯通分量增加,則這條邊稱為橋。邊雙聯通分量 如果乙個對於乙個圖的某個子圖,任意兩點至少存在兩條 邊不重複 的路徑,則這個子圖是邊雙聯通分量。很顯然,任意乙個邊雙中不含有橋。除橋外每條邊都僅屬於乙個邊雙。如果把原圖中所有橋刪除,每個聯通分量都是原圖...

邊雙聯通分量與割邊

在圖論中,除了在有向圖中的強連通分量,在無向圖中還有一類雙聯通分量 雙聯通分量一般是指點雙連通分量 當然,還有一種叫做邊雙連通分量 對於乙個連通圖,如果任意兩點至少存在兩條 邊不重複 的路徑,則說圖是點雙連通的,邊雙連通的極大子圖稱為邊雙連通分量。邊雙聯通分量的計算方法比較簡單 模擬tarjan求強...

邊雙聯通分量與割邊

在圖論中,除了在有向圖中的強連通分量,在無向圖中還有一類雙聯通分量 雙聯通分量一般是指點雙連通分量 當然,還有一種叫做邊雙連通分量 對於乙個連通圖,如果任意兩點至少存在兩條 邊不重複 的路徑,則說圖是點雙連通的,邊雙連通的極大子圖稱為邊雙連通分量。邊雙聯通分量的計算方法比較簡單 模擬tarjan求強...