1 #include <stdio.h>
2 #include <string.h>
3 #define MAXN 101
4 bool map[MAXN][MAXN];
5 int n,m;
6
7 void floyd()
8 {
9 for(int k=1; k<=n; k++)
10 for(int i=1; i<=n; i++)
11 for(int j=1; j<=n; j++)
12 map[i][j]=(map[i][j]||(map[i][k]&&map[k][j]));
13 }
14
15 int main()
16 {
17 while(scanf("%d %d", &n, &m)==2)
18 {
19 memset(map,false,sizeof(map));
20 for(int i=1;i<=n;i++)
21 map[i][i]=true;
22 for(int i=1,a,b;i<=m;++i)
23 {
24 scanf("%d %d", &a, &b);
25 map[a][b]=true;
26 }
27 floyd();
28 int cnt = 0;
29 bool f;
30 for(int i=1; i<=n; i++)
31 {
32 f=true;
33 for(int j=1;j<=n;j++)
34 if(!(map[i][j]||map[j][i]))
35 {
36 f=false;
37 break;
38 }
39 if(f) ++cnt;
40 }
41 printf("%d\n",cnt);
42 }
43 return 0;
44 }