【模板】割點
割點集合:乙個頂點集合v,刪除該集合的所有定點以及與這些頂點相連的邊後,原圖不連通,就稱集合v為割點集合
點連通度:最小割點集合中的頂點數
邊連通度:最小割邊集合中的邊數
割點:割點集合中唯一的乙個元素
tarjan求縮點:
乙個點為縮點的條件:
1.該點為根,搜尋樹中有大於1個子樹
2.該點u不為根,存在兒子v,dfn[u]>low[v]
1 #include2 #include3 #include4using
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 ...