POJ 2117 割點 連通分量

2021-09-08 17:24:35 字數 1382 閱讀 7479

題目鏈結

題目大意:在乙個非連通圖中,求乙個切除圖中任意乙個割點方案,使得圖中連通分量數最大。

解題思路

乙個大陷阱,m可以等於0,這時候要特判,結果就是n-1。

同時出題者腦子秀逗了,也不給c的範圍。我開了兩倍點大小re了,於是怒開了五倍點大小才a了。

本題不是連通圖,需要先計算原始圖中的連通分量。方法就是dfs染色。

然後dfs求割點。

之後列舉割點,由於是非連通圖,所以連通分量數=原始分量數+block-1。

-1的原因是,每次相當於對其中乙個連通分量計算,加上新的block之後,所以要減-1。

#include "

cstdio

"#include

"cstring

"#include

"vector

"using

namespace

std;

#define maxn 10005

struct

edge

e[maxn*5

];int

dfs_clock,pre[maxn],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) }

}void link(int u) //

判斷初始連通分量

}int

main()

int res=0,tt=0

;

for(int i=0; iif(!vis[i])

memset(vis,

false,sizeof

(vis));

for(int i=0; iif(!pre[i]) dfs(i,-1

); res=tt;

for(int i=0; i)

}printf(

"%d\n

",res);}}

}

2905876

neopenx

poj2117

accepted

7322422

c++2129

POJ 1523 割點 連通分量

題目鏈結 題目大意 連通圖,找圖中割點,並計算切除該割點後,圖中的連通分量個數。解題思路 poj的資料很弱。tarjan法求割點。pre陣列,記錄這個點的dfs時間位置。割點的條件是lowv pre u 即子點比父點先dfs,這時候父點就沒有意義了,切掉父點連通分量數肯定會增加。同時注意特判只有兩個...

點連通分量 邊連通分量 割點和橋 強連通分量

老是搞不清他們的關係,不知道該用那份 今天理了一下,整理一下模板 點連通分量 可以求出點連通分量包含哪些點,那個點屬於那個連通分量 struct edge int pre maxn iscut maxn bccno maxn dfs clock,bcc cnt vectorg maxn bcc ma...

poj2117求割點後最多的塊。

tarjan演算法,列舉割點 注意此題無向圖可能不連通 每個割點分割後最大塊數 連通分量 1即可。開始老是tle,後來比較了他人 只在vector.用全域性變數即可,用區域性tle。記住教訓。include 600 ms 5000ms include include 用這個做鍊錶,儲存邊,方便。in...