代码
#include<bits/stdc++.h>
using namespace std;
const int N=10010,M=50100;
int h[N],e[M],nex[M],idx;
int id[N],dfn[N],low[N],timestamp;
int sk[N],st[N],top;
int din[N],dout[N],Size[N],scc_cnt;
void add(int u,int v){
e[idx]=v;
nex[idx]=h[u];
h[u]=idx++;
}
void tarjan(int u){
dfn[u]=low[u]=++timestamp;
sk[top++]=u;st[u]=1;
for(int i=h[u];~i;i=nex[i]){
int v=e[i];
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(st[v]) low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
scc_cnt++;
int v;
do{
v=sk[--top];
st[v]=0;
id[v]=scc_cnt;
Size[scc_cnt]++;
}while(v!=u);
}
}
int main(){
int n,m;
memset(h,-1,sizeof h);
cin>>n>>m;
for(int i=1;i<=m;++i){
int u,v;
cin>>u>>v;
add(u,v);
}
for(int i=1;i<=n;++i){
if(!dfn[i]) tarjan(i);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步