P3388 割頂 求割點個數

2022-05-18 05:49:45 字數 1979 閱讀 8898

第一行輸入兩個正整數 n,mn,m。

下面 mm 行每行輸入兩個正整數 x,yx,y 表示 xx 到 yy 有一條邊。

第一行輸出割點個數。

第二行按照節點編號從小到大輸出節點,用空格隔開。

輸入 #1複製

6 7

1 21 3

1 42 5

3 54 5

5 6

輸出 #1複製

1 

5

code

#include

<

bits/stdc++.h

>

#define

dbg(

x) cout << #x <<"=

"<< x << endl

using

namespace

std;

typedef

long

long ll;

const

int maxn =

1e5+7;

int head[maxn], dfn[maxn], low[maxn];

int cnt =

0, tot =

0, tim =

0, top =

1, cl =

0, k;

int vis[maxn];

int color[maxn];

int iscut[maxn];

int tott, n, m;

/*head,結構體edge:存邊

dfn,low:tarjan中陣列

st:模擬棧

out:出邊

sd:強連通分量儲存

dq:統計答案

*/template

<

class

t>

inline

void

read(t

&res

)struct

edge

edge

[maxn *2];

inline

void

buildgraph

(int

from

,intto)

stack s;

void

tarjan

(intu,

intfa)if

(u == fa)

}low

[u]=

min(

low[u],

dfn[v]);}if

(son >=

2&& u == fa)

}void

init

()memset

(vis,0,

sizeof

(vis));

memset

(dfn,0,

sizeof

(dfn));

memset

(low,0,

sizeof

(low));

memset

(iscut,0,

sizeof

(iscut));

memset

(edge,0,

sizeof

(edge));

memset

(head,0,

sizeof

(head));

}int

main

()for

(int i =

1; i <= n;

++i )

}for

(int i =

1; i <= n;

++i )

}printf

("%d\n"

,tott);

for(

int i =

1; i <= n;

++i )

}return0;

}

P3388 模板 割點(割頂)

割點 題目描述 給出乙個n個點,m條邊的無向圖,求圖的割點。輸入格式 第一行輸入n,m 下面m行每行輸入x,y表示x到y有一條邊 輸出格式 第一行輸出割點個數 第二行按照節點編號從小到大輸出節點,用空格隔開 輸入樣例 1 複製6 7 1 21 3 1 42 5 3 54 5 5 6輸出樣例 1 複製...

P3388 模板 割點(割頂)

割點 給出乙個n個點,m條邊的無向圖,求圖的割點。輸入格式 第一行輸入n,m 下面m行每行輸入x,y表示x到y有一條邊 輸出格式 第一行輸出割點個數 第二行按照節點編號從小到大輸出節點,用空格隔開 輸入樣例 1 6 7 1 21 3 1 42 5 3 54 5 5 6 輸出樣例 1 1 5 n,m均...

P3388 模板 割點(割頂)

n 給定一張無向圖g g g,求圖的割點 s ol utio nsolution soluti on判斷條件 非搜尋樹起點x xx,任意乙個子節點y yy,滿足dfn x l ow y dfn x low y dfn x l ow y 搜尋樹起點rtrt rt,至少兩個子節點y yy,滿足dfn x...