HDU 4324 Triangle LOVE(拓扑排序)

题目链接

有结论。。在有向图中,每两个点都存在一条边,如果存在环,则一定存在3元环。拓扑排序一下。

 1 #include <stdio.h>

 2 #include <string.h>

 3 char str[2001][2001];

 4 int o1[2001],o2[2001],k[2001];

 5 int main()

 6 {

 7     int t,i,j,num = 0,n,z,nu;

 8     scanf("%d",&t);

 9     while(t--)

10     {

11         num ++;

12         memset(k,0,sizeof(k));

13         memset(o1,0,sizeof(o1));

14         memset(o2,0,sizeof(o2));

15         scanf("%d%*c",&n);

16         for(i = 0; i <= n-1; i ++)

17             gets(str[i]);

18         for(i = 0; i <= n-1; i ++)

19         {

20             for(j = 0; j <= n-1; j ++)

21             {

22                 if(str[i][j] == '1')

23                 {

24                     o1[i] ++;

25                     o2[j] ++;

26                 }

27             }

28         }

29         nu = 0;

30         for(;;)

31         {

32             z = 0;

33             for(i = 0; i <= n-1; i ++)

34             {

35                 if(o2[i] == 0&&!k[i])

36                 {

37                     k[i] = 1;

38                     z = 1;

39                     nu ++;

40                     for(j = 0;j <= n-1;j ++)

41                     {

42                         if(str[i][j] == '1'&&!k[j])

43                         {

44                            o2[j] --;

45                         }

46                     }

47                 }

48             }

49             if(nu == n) break;

50             if(!z) break;

51         }

52         if(nu == n)

53         z = 0;

54         else

55         z = 1;

56         printf("Case #%d: ",num);

57         if(z)

58             printf("Yes\n");

59         else

60             printf("No\n");

61     }

62     return 0;

63 }

你可能感兴趣的:(love)