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

2021-12-29 22:18:32 字數 1054 閱讀 4157

題意就是求出在乙個圖上去除乙個點之後,那個圖會變成多少個子連通圖。

顯然我們要求出割頂。我的**套用了劉汝佳的大白書的tarjan演算法,用乙個陣列cnt記錄乙個點是多少個點雙連通分量的割頂。當發現乙個點是割頂的時候,就cnt[i]++。最後,如果乙個點是一棵dfs樹的樹根時,就輸出cnt[i],否則就輸出cnt[i]+1(因為那個點有父親,而cnt陣列記錄的相當於是該點的兒子個數)。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

struct edge

edge(){}

};const int maxn=1005;

int pre[maxn],iscut[maxn],bccno[maxn],dfs_clock,bcc_cnt;

vectorg[maxn],bcc[maxn];

vector > ans;

int cnt[maxn];

bool isfa[maxn];

stacks;

int dfs(int u,int fa)

if(bccno[x.v]!=bcc_cnt)

if(x.u==u&&x.v==v) break;}}

} else if(pre[v]maxed) maxed=u;

scanf("%d",&v);

if(v>maxed) maxed=v;

valid=true;

u--,v--;

g[u].push_back(v);

g[v].push_back(u);

}else

} if(!flag) break;

if(valid==false) break;

find_bcc(maxed);

bool hascut=false;

for(int i=0;i

POJ 1523 SPF 雙連通分量 割點

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

割點問題 poj 1523 SPF

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

poj1523割頂 點雙聯通

題意 求出所有的割頂,而且還有輸出該割頂連線了幾個點雙連通分量 題解 直接tarjan求點雙聯通分量就好了,可以在加入邊的時候記錄加入次數,大於1的都是橋,輸入輸出很噁心,注意格式 include include include include include include include inc...