POJ 1523 割點 連通分量

2022-07-04 15:06:14 字數 1486 閱讀 9918

題目鏈結:

題目大意:連通圖,找圖中割點,並計算切除該割點後,圖中的連通分量個數。

解題思路

poj的資料很弱。

tarjan法求割點。

pre陣列,記錄這個點的dfs時間位置。

割點的條件是lowv>=pre[u], 即子點比父點先dfs,這時候父點就沒有意義了,切掉父點連通分量數肯定會增加。

同時注意特判只有兩個點的情況,這時候是不可能出現割點的。

求切除割點後的聯通分量數:

從割點出發,把圖dfs一遍,如果u=割點,那麼對於每個子點v,block++

原理就是,切掉割點後,所有與其連線子點都要受到影響,統計第一次訪問的子點v的block即可。

#include "

cstdio

"#include

"vector

"#include

"string

"#include

"iostream

"#include

"cstring

"using

namespace

std;

#define maxn 1005

struct

edge

e[maxn*2

];int

pre[maxn],dfs_clock,block,head[maxn],tol;

bool

cut[maxn],vis[maxn];

void addedge(int u,int

v)int dfs(int u,int

fa)

else

if(pre[v]min(lowu,pre[v]);

}if(fa<0&&child==1) cut[u]=false

;

return

lowu;

}void check(int u,int

fa) }

}int

main()

if(!flag) cout<<"

no spf nodes

"

0,sizeof

(pre));

memset(cut,

false,sizeof

(cut));

memset(head,-1,sizeof

(head));

dfs_clock=0;num=0;tol=0

; printf("\n

");}

else

}}

13424402

neopenx

1523

accepted

216k

0msc++

2309b

2014-09-08 19:04:33

POJ 1523 SPF 雙連通分量 割點

題意 找出無向圖的割點,並判斷每個割點去掉後能形成多少個雙連通分量。分析 割點的定義 在深搜樹中,時間戳為 dfn k 當 k 滿足 1 2 中乙個時,k 為割點 1 k 為深搜樹的根,當且僅當 k 的兒子個數 2 時 k 為割點 2 k 為深搜樹的中間節點 k 既不是根也不是葉 那麼k 必然有父親...

POJ 1523 SPF (割頂 點雙連通分量)

題意就是求出在乙個圖上去除乙個點之後,那個圖會變成多少個子連通圖。顯然我們要求出割頂。我的 套用了劉汝佳的大白書的tarjan演算法,用乙個陣列cnt記錄乙個點是多少個點雙連通分量的割頂。當發現乙個點是割頂的時候,就cnt i 最後,如果乙個點是一棵dfs樹的樹根時,就輸出cnt i 否則就輸出cn...

POJ 2117 割點 連通分量

題目鏈結 題目大意 在乙個非連通圖中,求乙個切除圖中任意乙個割點方案,使得圖中連通分量數最大。解題思路 乙個大陷阱,m可以等於0,這時候要特判,結果就是n 1。同時出題者腦子秀逗了,也不給c的範圍。我開了兩倍點大小re了,於是怒開了五倍點大小才a了。本題不是連通圖,需要先計算原始圖中的連通分量。方法...