poj1523割頂 點雙聯通

2022-03-15 23:58:20 字數 1603 閱讀 5630

題意:求出所有的割頂,而且還有輸出該割頂連線了幾個點雙連通分量

題解:直接tarjan求點雙聯通分量就好了,可以在加入邊的時候記錄加入次數,大於1的都是橋,輸入輸出很噁心,注意格式

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define fi first

#define se second

#define mp make_pair

#define pb push_back

#define pii pair#define c 0.5772156649

#define pi acos(-1.0)

#define ll long long

#define mod 1000000007

#define ls l,m,rt<<1

#define rs m+1,r,rt<<1|1

using

namespace

std;

using

namespace

__gnu_cxx;

const

double g=10.0,eps=1e-7

;const

int n=1000+10,maxn=100000+10,inf=0x3f3f3f

;map

ma[n];

vector

v[n],bcc[n];

intdfn[n],low[n];

intindex,num;

intbccno[n],iscut[n];

struct edge;

stack

s;void tarjan(int u,intf);

if(x==f)continue

;

if(!dfn[x])

if(bccno[p.to]!=num)

if(p.from==e.from&&p.to==e.to)break

; }}}

else

}}void

init()

while(!s.empty())s.pop();

}int

main()

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

if(!dfn[i])

tarjan(i,-1

);

/*cout

printf(

"network #%d\n

",++cnt);

bool ok=0

;

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

}if(!ok)printf("

no spf nodes\n");

puts(

"");

}return0;

}/************

***********

*/

view code

POJ 1523 割點 連通分量

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

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

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

割點問題 poj 1523 SPF

題目大意 給定乙個網路,看是否有關節點存在 即割點,即去除該點後,圖變成非連通圖 如果存在輸出該節點和去除該節點後連通子圖的個數,如果不存在割點即輸出沒有割點存在。求割點直接用dfs解決即可,問題在於統計去除該割點後,連通子圖的個數,其實在dfs時,遇到割點時,只要發現其兒子結點的low值比該割點的...