传递闭包
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 1e9+10
const int N=1e2+10;
int n,m,mp[N][N];
void floyd(){
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
mp[i][j]=mp[i][j]|(mp[i][k]&mp[k][j]);//***
//&:全一才为一
//|:全零才为一
}
void solve() {
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
mp[u][v]=1;
}
floyd();
int ans=0;
for(int i=1;i<=n;i++){
int flag=1;
for(int j=1;j<=n;j++){
if(i==j) continue;//**
flag=flag&(mp[i][j]|mp[j][i]);//**
}
ans+=flag;//**
}
cout<<ans<<"\n";
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int tt=1;
//cin>>tt;
while(tt--) {
solve();
}
return 0;
}