#include<bits/stdc++.h>
using namespace std;
int n,x,tot,cmp[1000010],u,v,m;
vector<int> G[1000010],G2[1000010],a,a2;
bool used[1000010];
void dfs1(int s)
{
used[s]=1;
for (int i=0;i<G[s].size();i++)
if (!used[G[s][i]])
dfs1(G[s][i]);
a.push_back(s);
}
void dfs2(int s,int ss)
{
used[s]=1;
cmp[s]=ss;
for (int i=0;i<G2[s].size();i++)
if (!used[G2[s][i]])
dfs2(G2[s][i],ss);
a2.push_back(s);
}
void add(int x,int y)
{
G[x].push_back(y);
G2[x].push_back(y);
}
int main()
{
cin>>n>>m;
for (int i=1;i<=m;i++)
cin>>u>>v,add(u-1,v-1);
memset(used,0,sizeof(used));
a.clear();
for (int i=0;i<n;i++)
if (!used[i])
dfs1(i);
int k=0;
memset(used,0,sizeof(used));
for (int i=n-1;i>=0;i--)
if (!used[a[i]])
dfs2(a[i],k++);
cout<<k;
return 0;
}
为什么这道题,没开O2RE了
开了O2就AC了