pku3660 Cow Contest

http://poj.org/problem?id=3660

图论,最短路,floyd

 1 #include <stdio.h>
 2 #define N 123
 3 
 4 const int inf = 1<<29;
 5 int n, g[N][N];
 6 
 7 int min(int x, int y)
 8 {
 9     return x<y? x: y;
10 }
11 
12 void floyd()
13 {
14     for(int k=1; k<=n; k++)
15     {
16         for(int i=1; i<=n; i++)
17         {
18             for(int j=1; j<=n; j++)
19             {
20                 g[i][j] = min(g[i][j], g[i][k]+g[k][j]);
21             }
22         }
23     }
24 }
25 
26 int main()
27 {
28     int m, r, i, j, x, y, flag;
29     scanf("%d%d", &n, &m);
30     for(i=1; i<=n; i++)
31     {
32         for(j=1; j<=n; j++)
33         {
34             g[i][j] = inf;
35         }
36     }
37     for(i=1; i<=m; i++)
38     {
39         scanf("%d%d", &x, &y);
40         g[x][y] = 1;
41     }
42     floyd();
43     r = 0;
44     for(i=1; i<=n; i++)
45     {
46         flag = 0;
47         for(j=1; j<=n; j++)
48         {
49             if(j != i)
50             {
51                 if(g[i][j] == inf && g[j][i] == inf)
52                 {
53                     flag = 1;
54                     break;
55                 }
56             }
57         }
58         if(flag == 0)
59         {
60             //printf("%d\n", i);
61             r ++;
62         }
63     }
64     printf("%d\n", r);
65     return 0;
66 }
原文地址:https://www.cnblogs.com/yuan1991/p/pku3660.html