模板 強連通分量的kosaraju演算法實現

2021-08-04 22:49:35 字數 1174 閱讀 2369

n頭牛,現在給出m組關係(a,b)表示a喜歡b,喜歡具有傳遞性,問有多少頭牛是被所有牛喜歡。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=10005;

const

int maxm=50005;

int n,m;

bool used[maxn];

int belong[maxn];//所屬強連通分量的拓撲序,belong[i]表示i屬於哪個分支

int out[maxn];

struct edge

edge[maxm*2];

int edgecount;

int head[maxn];

int rhead[maxn];

void init()

void add_edge1(int u,int v)

void add_edge2(int u,int v)

stack

q;void dfs(int u)

q.push(u);

}void rdfs(int u,int group)

}int scc()//返回強連通分量個數

memset(used,0,sizeof(used));

while(!q.empty())

}return ans;

}int main()

int scc_cnt=scc();

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

}int sum=0;//統計出度為0的點的塊數

int x;//出度為0的連通分量編號

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

}int ans=0;

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

if(sum==1)cout

cout

<<0

0;}

強連通分量(模板)

low u min edge maxm 2 int head maxm 2 tot int low maxn dfn maxn belong maxn belong 的值為1 scc int index,top int scc 強連通分量 bool instack maxn int num maxn...

強連通分量模板

知識背景 首先明確強連通分量 strongly connected component 的概念,從任一頂點能夠到達任一其他頂點的有向圖 的頂點子集,而任意有向圖均可以分解成若干不相交的scc。把每個scc視作乙個頂點,可得到乙個dag。實現演算法 兩次dfs,第一次 dfs 遍歷將頂點後序 post...

強連通分量 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 圖的鄰...