割點 (模板) 洛谷3388

2022-05-12 12:45:57 字數 1112 閱讀 1453

題目背景

割點題目描述

給出乙個n個點,m條邊的無向圖,求圖的割點。

輸入輸出格式

輸入格式:

第一行輸入n,m

下面m行每行輸入x,y表示x到y有一條邊

輸出格式:

第一行輸出割點個數

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

輸入輸出樣例

輸入樣例#1: 複製

6 7

1 2

1 3

1 4

2 5

3 5

4 5

5 6

輸出樣例#1: 複製

1 5

說明n,m均為100000

tarjan 圖不一定聯通!!!

#include

#include

using

namespace

std;

const

int maxn = 100010;

struct edge edge[maxn*2];

int n,m,dfn[maxn],low[maxn],tot,cnt;

int head[maxn],num;

bool cut[maxn];

inline

void add(int bg,int ed)

inline

void tarjan(int u,int fa)

low[u]=min(low[u],dfn[v]);

if(child>=2 && u==fa)

cut[u]=1;

}}inline

void debug()

int main()

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

if(!dfn[i]) tarjan(i,i);

//debug();

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

if(cut[i]) tot++;

printf("%d\n",tot);

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

return

0;}

洛谷3388 割點(割頂)模板

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

洛谷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來說,...