無向連通圖求割點和橋
定義
無向連通圖中,如果刪除某點後,圖變成不連通,則稱該點為割點
無向連通圖中,如果刪除某邊後,圖變成不連通,則稱該邊為橋
無重邊的無向連通圖求割點和橋
dfn[i]表示編號為i的節點在DFS過程中的訪問序列(也可以叫做開始時間)。在DFS過程中會形成一搜尋樹。在搜尋樹上越先遍歷到的節點,dfn值越小
low[i]定義為i或者i的子樹中能夠通過非父子邊追溯到的最早的節點的DFS開始時間。
一個頂點u是割點,當且僅當滿足(1)或(2)
(1)u為樹根,且u有多於一個子樹
(2)u不為樹根,且存在(u,v)為樹枝邊(或稱父子邊,即u為v在搜尋樹中的父親),使得dfn[u]<=low[v]
非樹枝邊不可能是橋
一條邊(u,v)是橋,當且僅當(u,v)為樹枝邊,且滿足dfn[u]<low[v](前提是沒有重邊)
//無重邊的無向連通圖求割點和橋
#include<iostream>
#include<vector>
using namespace std;
const int N=200;
vector<int>g[N];
int dfn[N],low[N],pre[N];
bool flag[N];//記錄每個點是否為割點
int index,n,m;//index編號 n點數 m邊數
void Tarjan(int u,int father)//father是u的父節點
{
pre[u]=father;
dfn[u]=low[u]=index++;
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(!dfn[v]){
Tarjan(v,u);
low[u]=min(low[u],low[v]);
}
else if(father!=v)//連到父節點的回邊不考慮,否則求不出橋
low[u]=min(low[u],dfn[v]);
}
}
void Count()
{//計算割點和橋
int num=0;
Tarjan(1,0);
for(int i=2;i<=n;i++){
int v=pre[i];
if(v==1)
num++;//DFS樹中根節點有幾個子樹
else if(dfn[v]<=low[i])
flag[v]=true;
}
if(num>1)
flag[1]=true;
for(int i=1;i<=n;i++)
if(flag[i])
cout<<i<<endl;
for(int i=1;i<=n;i++){
int v=pre[i];
if(v>0&&dfn[v]<low[i])
cout<<v<<","<<i<<endl;
}
}
int main()
{
int u,v;
index=1;
cin>>n>>m;//點數 邊數
for(int i=1;i<=m;i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
Count();
return 0;
}
相關文章
- 無向連通圖點雙連通分量
- 【筆記/模板】割點和橋筆記
- 無向連通圖邊雙連通分量
- 「學習筆記」雙連通分量、割點與橋筆記
- Day7 割點、割邊和強連通分量
- 有向圖的連通性(判強連通)
- Tarjan 求有向圖的強連通分量
- POJ 1734 Sightseeing trip Floyd求無向圖最小環
- 圖-無向圖
- 【筆記/模板】無向圖的雙連通分量筆記
- 無向圖最小割問題取得新突破,谷歌研究獲SODA 2024最佳論文獎谷歌
- P3388 【模板】割點(割頂)
- Vue中通過Axios向SpringBoot傳送get和post請求VueiOSSpring Boot
- 洛谷 P3388 【模板】割點(割頂)
- 圖論-有向圖縮點圖論
- 嗅探器(割點)
- 快速求圖上最小點定聯通塊權值的Trick
- 有向圖強連通分支
- Python 圖_系列之基於<連結表>實現無向圖最短路徑搜尋Python
- 最大半連通子圖
- SSL_1758【連通圖】
- 有向圖的強連通性(java)Java
- 待補 重要思考:求給無向圖定向使得其變為DAG的方案數
- BeanPostProcessor——連線Spring IOC和AOP的橋樑BeanSpring
- 無向圖的最小環問題
- 雙向連結串列 尾節點插入
- 有向圖的強連通分量 模版
- 致同:變中求進 躍向無界未來
- 資料結構-棧(通過陣列和單向連結串列實現)資料結構陣列
- 為了求“道”,他們做了一款連自己都無法通關的遊戲遊戲
- 無向圖的最小環問題[TODO]
- 如何在 Java 中實現無向圖Java
- 連通圖與Tarjan演算法演算法
- Android 12(S) 圖形顯示系統 - 應用建立和SurfaceFlinger的溝通橋樑(三)Android
- 結構與演算法(03):單向連結串列和雙向連結串列演算法
- 樂訊通雲通訊:物聯網路卡為智慧裝置建立連線的橋樑
- CH 6703 PKU ACM Team's Excursion 有向圖的必經邊或“橋”ACM
- 連通圖演算法詳解之① :Tarjan 和 Kosaraju 演算法演算法