本次專題是強連通分量的tarjan演算法,以下程式包含stl建圖,dfs遍歷,強連通分量假縮點,求縮點入度出度。
#include
#include
#include
#include
#include
#define m 10005
using
namespace
std;
stack
s;int pre[m],//dfs的步數(時間)
low[m],//若屬於同一強連通分量,則low值更改為之前的最小時間;
c[m],k[m],
belong[m],//記錄是否屬於同一強連通分量
in[m],//分量入度
out[m];//分量出度
int m,n,time1,time2,t1,t2,w;
vector
g[m];
void dfs(int u)
if(!c[v])
low[u]=min(pre[v],low[u]);
}if(pre[u]==low[u])//若當前節點步數值等於low值,則乙個強連通分量構成
}}void find()
int main()
}find();
for(int i=1;i<=n;i++)
for(int j=0;jint v=g[i][j];
if(belong[i]!=belong[v])//若不屬於同一強連通分量
}//以下過程針對 洛谷p2812
/*int ans1=0,ans2=0;
for(int i=1;i<=time2;i++)
if(time2==1)
ans2=max(ans1,ans2);
printf("%d\n%d",ans1,ans2);*/
return
0;}
強連通分量 tarjan求強連通分量
雙dfs方法就是正dfs掃一遍,然後將邊反向dfs掃一遍。挑戰程式設計 上有說明。雙dfs 1 include 2 include 3 include 4 include 5 6using namespace std 7const int maxn 1e4 5 8 vector g maxn 圖的鄰...
強連通分量
對於有向圖的乙個頂點集,如果從這個頂點集的任何一點出發都可以到達該頂點集的其餘各個頂點,那麼該頂點集稱為該有向圖的乙個強連通分量。有向連通圖的全部頂點組成乙個強連通分量。我們可以利用tarjan演算法求強連通分量。define n 1000 struct edge e 100000 int ec,p...
強連通分量
在有向圖g中,如果兩個頂點間至少存在一條路徑,稱兩個頂點強連通 strongly connected 如果有向圖g的每兩個頂點都強連通,稱g是乙個強連通圖。非強連通圖有向圖的極大強連通子圖,稱為強連通分量 strongly connected components 下圖中,子圖為乙個強連通分量,因為...