题目描述
博客链接:https://blog.csdn.net/qq_45830025/article/details/113876193
#include <iostream>
#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define INF 0x3f3f3f3f
#define inf 0x3f3f3f3f3f3f3f3f
#define rep(i,a,b) for(auto i=a;i<=b;++i)
#define bep(i,a,b) for(auto i=a;i>=b;--i)
#define lowbit(x) x&(-x)
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define PI acos(-1)
#define pb push_back
#define eps 1e-6
const int mod = 1e9 + 7;
const int MOD = 1e4+7;
const int N = 2e6 + 10;
const int M = 1111;
int dx[]={-1, 0, 1, 0};
int dy[]={0, 1, 0, -1};
int dxy[][2]={{0,1},{1,0},{1,1},{-1,1}};
using namespace std;
int hp[M][2];
int dp[MOD][2];
int mp[MOD][2];
int tot[2];
int vis[M][2];
void add(int u,int v,int k){
dp[++tot[k]][k]=v;
mp[tot[k]][k]=hp[u][k];
hp[u][k]=tot[k];
}
void DFS(int u,int k){
for(int i=hp[u][k];i;i=mp[i][k]){
int v=dp[i][k];
if(!vis[v][k]){
vis[v][k]=1;
DFS(v,k);
}
}
}
bool judge(int n){
rep(i,1,n){
if(!vis[i][0]&&!vis[i][1]) return 0;
}
return 1;
}
void solve(){
int n,m;
cin>>n>>m;
while(m--){
int u,v;
cin>>u>>v;
add(u,v,0);
add(v,u,1);
}
int ans=0;
rep(i,1,n){
memset(vis,0,sizeof(vis));
vis[i][0]=vis[i][1]=1;
DFS(i,0);
DFS(i,1);
if(judge(n)) ans++;
}
cout<<ans<<endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}