洛谷P3388 模板 割點

2022-05-05 21:27:09 字數 1088 閱讀 8823

【模板】割點

割點集合:乙個頂點集合v,刪除該集合的所有定點以及與這些頂點相連的邊後,原圖不連通,就稱集合v為割點集合

點連通度:最小割點集合中的頂點數

邊連通度:最小割邊集合中的邊數

割點:割點集合中唯一的乙個元素

tarjan求縮點:

乙個點為縮點的條件:

1.該點為根,搜尋樹中有大於1個子樹

2.該點u不為根,存在兒子v,dfn[u]>low[v]

1 #include2 #include3 #include4

using

namespace

std;

5#define n 100010

6#define m 200010

7int

n,m,dfn[n],low[n];

8int

head[n],num,root,cnt;

9bool

gd[n];

10 inline int

read()

14return

x;15}16

struct

node e[m];

19 inline void add(int x,int

y)24

void tarjan(int

u)35

else

36 low[u]=min(low[u],dfn[e[i].to]);37}

38int

main()

3946

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

47if(!dfn[i])

50int ans=0;51

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

52if(gd[i]) ans++;

53 printf("

%d\n

",ans);

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

55if

(gd[i])

56 printf("

%d "

,i);

57return0;

58 }

洛谷P3388 模板 割點

給出乙個n個點,m條邊的無向圖,求圖的割點。u是cut vertex的兩個條件 1.存在v使v及其所有後代沒有反向邊連回u的祖先 2.u是根且有兩個以上子節點 dfs一遍 low u 是u及其後代所能連回的最早祖先 沒有dfn v 就dfs v 然後用low v 更新low u v是u的後代 否則v...

洛谷P3388 模板 割點

都快忘了割點怎麼搞了 對所有點分兩類 1.根節點 2.非根節點 顯然根節點是很好做的 只需要數一下有沒有兩個子樹以上 對於非根節點 利用tarjan演算法 回憶到dfn的定義 時間戳,即在dfs中第幾個被訪問到 low 經過最多一條後向邊 棧中橫叉邊能到達的最小的節點時間戳 對於當前節點now來說,...

模板 割點(洛谷P3388)

給出乙個 n 個點,m 條邊的無向圖,求圖的割點。第一行輸入 n m 下 m 行每行輸入 x y 表示 x 到 y 有一條邊。第一行輸出割點個數。第二行按照節點編號從小到大輸出節點,用空格隔開。include include includeusing namespace std const int ...