强联通
Posted andromeda-galaxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强联通相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; vector<int> g[maxn]; vector<int> rg[maxn]; vector<int> vs; bool vis[maxn]; int camp[maxn]; void add_edge(int x,int y) { g[x].push_back(y); rg[y].push_back(x); } void dfs(int x) { vis[x]=1; for(int i=0;i<g[x].size();i++) if(!vis[g[x][i]]) dfs(g[x][i]); vs.push_back(x); } void rdfs(int x,int k) { vis[x]=1; camp[k]=k; for(int i=0;i<rg[x].size();i++) if(!vis[rg[x][i]]) rdfs(rg[x][i],k++); } int main() { int n,m; cin>>n>>m; for(int i=1;i<=m;i++) { int x,y; add_edge(x,y); } for(int i=1;i<=n;i++) { if(!vis[i]) dfs(i); } memset(vis,0,sizeof(vis)); int k=0; for(int i=vs.size();i>=0;i--) { if(!vis[vs[i]]) rdfs(vs[i],k++); } }
以上是关于强联通的主要内容,如果未能解决你的问题,请参考以下文章