题目链接:http://poj.org/problem?id=3660
floyd。
1 #include<cstdio> 2 #include<cstring> 3 int n,m; 4 int pic[110][110]; 5 void floyd() 6 { 7 for(int k=1;k<=n;k++) 8 for(int i=1;i<=n;i++) 9 for(int j=1;j<=n;j++) 10 pic[i][j]=pic[i][j]|pic[i][k]&pic[k][j]; 11 } 12 13 int main() 14 { 15 int u,v; 16 while(scanf("%d%d",&n,&m)!=EOF) 17 { 18 for(int i=1;i<=n;i++) 19 for(int j=1;j<=n;j++) 20 pic[i][j]=(i==j?1:0); 21 for(int i=0;i<m;i++) 22 { 23 scanf("%d%d",&u,&v); 24 pic[u][v]=1; 25 } 26 floyd(); 27 int ans=0; 28 for(int i=1;i<=n;i++) //枚举牛i 29 { 30 int cnt=0; 31 for(int j=1;j<=n;j++) 32 { 33 if(pic[i][j]) cnt++; //比i小的 34 if(pic[j][i]) cnt++; //比i大的 35 } 36 if(cnt==n+1) ans++; //自己被重复算 37 } 38 printf("%d ",ans); 39 } 40 return 0; 41 }