uva 10972 邊雙連通分量)

2021-09-06 12:07:45 字數 1165 閱讀 3935

思路:和poj的一道題有點像,不過這道題圖可能不連通,因此首先求邊雙連通分量,然後算每個連通分量的度數,顯然葉子節點的度數為1,孤立點的度數為0,然後就是統計度數了,對於孤立點ans+=2,對於葉子節點,ans++。於是最後的答案就是(ans+1)/2了。

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7

using

namespace

std;

8#define maxn 1111910

intn, m, cnt, _count;

11 stack s;

12 vector int > >g;

1314

intlow[maxn], dfn[maxn], color[maxn];

15int

degree[maxn];

16bool

mark[maxn];

17void tarjan(int u, int

father)

18 else

if(mark[v]) 31}

32if(low[u] ==dfn[u])while(x !=u);41}

42}4344

intmain()

4555 memset(dfn, 0, sizeof

(dfn));

56 memset(mark, false, sizeof

(mark));

57 cnt = _count = 0;58

for(int i = 1; i <= n; i ++)

61if(_count == 1

)65 memset(degree, 0, sizeof

(degree));

66for(int i = 1; i <= n; i++)70}

71 ans = 0;72

for(int i = 1; i <= _count; i++)

76 printf("

%d\n

", (ans + 1)/2

);77}78

return0;

79 }

view code

邊雙連通分量還有橋

我發現了兩種邊雙的寫法 1.先求橋,標記橋再dfs求連通塊,似乎有點麻煩 2.直接上有向圖的寫法,把回頭的情況標記一下 其1int tarjan int x,int fa else if fa 1 i fa 1 return 0 int dfss int x return 0 scanf d lld...

雙連通分量

在無向連通圖中,如果刪除該圖的任何乙個結點都不能改變該圖的連通性,則稱該圖是雙連通的。雙連通無向圖一定是連通的,而連通的無向圖則不一定是雙連通的。對於乙個連通的無向圖也有雙連通分量的概念,定義自然不言而喻。同樣,我們也可以利用tarjan演算法求雙連通分量。define n 10000 struct...

雙連通分量

在乙個無向連通圖中,如果任意去掉乙個定點i及依附於i的所有邊後得到的圖仍然連通,則稱該圖為 2 連通圖 否則,若得到多個連通分量,則該圖不是雙連通的,頂點i被稱為 割點 簡單的說,在雙連通圖中,任何一對頂點都至少存在兩條路徑可以互相到達。圖的連通 性不會任何乙個頂點的影響。這個性質具有許多重要的應用...