洛谷P3388 模板 割點(割頂)

2022-05-24 01:30:07 字數 953 閱讀 9861

題目大意:求出乙個無向圖的割點

題解:$tarjan$,若乙個點為根節點(起始節點),只需要判斷它有多少個兒子,若不是根節點,假如$low_v\geqslant dfn_v$就說明$v$沒有返祖邊,即該節點$u$為割點。

卡點:1.多輸出了一些數

2.沒有去重

c++ code:

#include #include #define maxn 100010

using namespace std;

int n, m;

int ans[maxn], ansnum;

int head[maxn], cnt;

struct edge e[maxn << 1];

void add(int a, int b) ; head[a] = cnt;

}int dfn[maxn], low[maxn], idx;

inline int min(int a, int b)

void tarjan(int u, int rt)

} }if (child >= 2) ans[ansnum++] = u;

}int main()

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

sort(ans, ans + ansnum);

ansnum = unique(ans, ans + ansnum) - ans;

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

for (int i = 0; i < ansnum - 1; i++) printf("%d ", ans[i]);

if (ansnum) printf("%d\n", ans[ansnum - 1]);

return 0;

}

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

題目鏈結 題意 給出乙個n個點m條邊的無向圖,求其割點。思路 tarjan求割點模板題。tarjan 求割點 遍歷整個圖,則整個圖可轉化為一棵樹 附帶著有回邊 設定兩個陣列,dfn i 記錄搜尋到i的時間 low i 記錄在i的子樹中通過非父子邊能夠遍歷到的最早的dfn 那麼如何判斷乙個點是否是割點...

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 複製...