正确代码:
```cpp
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<stack>
using namespace std;
int index1,dfn[10000001],low[1000001],h,s[100001],n,m,x,y,z,k;
bool instack[1000001],vis[10001];
vector<int> g[100001];
stack<int> q;
void tarjan(int u){
dfn[u]=low[u]=++index1;
q.push(u);
vis[u]=true;
instack[u]=true;
for(int i=0;i<g[u].size();i++) {
int v=g[u][i];
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else{
if(instack[v]==true) {
low[u]=min(low[u],dfn[v]);
}
}
}
if(dfn[u]==low[u]){
h=0;
int v;
do{
h++;
v=q.top();
q.pop();
//s[v]=h;
instack[v]=false;
} while(u!=v);
if(h>1)k++;
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x>>y;
g[x].push_back(y);
}
for(int i=1;i<=n;i++){
if(!instack[i]){
tarjan(i);
}
}
cout<<k;
}
by 帅鹏 @ 2021-08-10 10:39:28