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 }