样例过了,WA40
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100002;
int n,m;
int tid;
int cnt;
int cc[MAXN];
int chu[MAXN];
stack <int> s;
int dfn[MAXN];
int low[MAXN];
int scc[MAXN];
bool ins[MAXN];
vector <int> links[MAXN];
vector <int> links2[MAXN];
void Tarjan(int u)
{
s.push(u);
ins[u] = true;
dfn[u] = low[u] = ++tid;
auto &link = links[u];
for(auto v : link)
{
if(!dfn[v])
{
Tarjan(v);
low[u] = min(low[u],low[v]);
}
else if(ins[v])
low[u] = min(low[u],dfn[v]);
}
if(dfn[u] == low[u])
{
int top;
cnt++;
do
{
top = s.top();
s.pop();
cc[cnt]++;
scc[top] = cnt;
ins[top] = false;
}
while(top != u);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> n >> m;
for(int i = 1;i <= n;i++)
{
int u,v;
cin >> u >> v;
links[u].push_back(v);
}
for(int i = 1;i <= n;i++)
if(!dfn[i])
Tarjan(i);
for(int u = 1;u <= n;u++)
{
int u2 = scc[u];
auto &link = links[u];
auto &link2 = links2[u];
for(auto v : link)
{
int v2 = scc[v];
if(u2 != v2)
{
links[u2].push_back(v2);
chu[u2]++;
}
}
}
int ss = 0;
for(int i = 1;i <= cnt;i++)
if(chu[i] == 0)
ss++;
if(ss != 1)
cout << 0 << endl;
else
{
for(int i = 1;i <= cnt;i++)
{
if(chu[i] == 0)
{
cout << cc[i] << endl;
return 0;
}
}
}
return 0;
}