題目大意:求出乙個無向圖的割點
題解:$tarjan$,若乙個點為根節點(起始節點),只需要判斷它有多少個兒子,若不是根節點,假如$low_v\geqslant dfn_v$就說明$v$沒有返祖邊,即該節點$u$為割點。
卡點:1.多輸出了一些數
2.沒有去重
c++ code:
#include #include #define maxn 100010using 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 複製...