nyoj Cow Contest (传递闭包)

 1 #include<iostream>

 2 #include<cstdio>

 3 #include<cstdlib>

 4 #include<cstring>

 5 #include<string>

 6 #include<queue>

 7 #include<algorithm>

 8 #include<map>

 9 #include<iomanip>

10 #include<climits>

11 #include<cmath>

12 #include<stdlib.h>

13 #include<vector>

14 #include<stack>

15 #include<set>

16 #define INF 2000000000

17 #define MAXN 110

18 #define maxn 1000010

19 #define Mod 1000007

20 #define N 1010

21 using namespace std;

22 typedef long long LL;

23 

24 int n, m;

25 bool G[MAXN][MAXN];

26 int u, v;

27 

28 void Floyd()

29 {

30     for (int k = 1; k <= n; ++k)

31         for (int i = 1; i <= n; ++i)

32             for (int j = 1; j <= n; ++j)

33                 G[i][j] |= G[i][k] & G[k][j];

34 }

35 

36 int main()

37 {

38     while (~scanf("%d%d", &n, &m), n + m) {

39         memset(G,0,sizeof(G));

40         for (int i = 0; i < m; ++i) {

41             scanf("%d%d", &u, &v);

42             G[u][v] = true;

43         }

44         Floyd();

45         int sum,ans = 0;

46         for (int i = 1; i <= n; ++i) {

47             sum = 0;

48             for (int j = 1; j <= n; ++j) {

49                 if (G[i][j] || G[j][i]) sum++;

50             }

51             if (sum == n - 1) ans++;

52         }

53         cout << ans << endl;

54     }

55     return 0;

56 }
代码君

 

你可能感兴趣的:(test)