洛谷P3388 模板 割點

2022-05-04 09:12:09 字數 817 閱讀 6484

都快忘了割點怎麼搞了

對所有點分兩類

1.根節點 2.非根節點

顯然根節點是很好做的 只需要數一下有沒有兩個子樹以上

對於非根節點 利用tarjan演算法

回憶到dfn的定義:時間戳,即在dfs中第幾個被訪問到 low:經過最多一條後向邊/棧中橫叉邊能到達的最小的節點時間戳

對於當前節點now來說,把整個圖分成了兩個子樹。假如low[vis]>=dfn[now],(注意不要把時間戳和編號序搞混) 也就是說vis節點最多只能追溯到now這棵子樹以內,而不能回到另一顆子樹去。就因為這個特殊的vis,now就成了割點。

然後注意細節吧 比如輸出 以及統計答案要單獨掃一遍 因為會有重複的

#include#define n 20005

#define m 100005

using namespace std;

templateinline void read(t &x)

struct edge

edge[2*m];

int n,m,tot,first[n];

inline void addedge(int x,int y)

int dfn[n],low[n],sign,cnt;

bool cut[n];

inline void dfs(int now,int fa)

else low[now]=min(low[now],dfn[vis]);

}if(fa==0&&child>=2) cut[now]=true; //根節點

}int main()

洛谷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 模板 割點

模板 割點 割點集合 乙個頂點集合v,刪除該集合的所有定點以及與這些頂點相連的邊後,原圖不連通,就稱集合v為割點集合 點連通度 最小割點集合中的頂點數 邊連通度 最小割邊集合中的邊數 割點 割點集合中唯一的乙個元素 tarjan求縮點 乙個點為縮點的條件 1.該點為根,搜尋樹中有大於1個子樹 2.該...

模板 割點(洛谷P3388)

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