Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/65536K (Java/Other)
Total Submission(s) : 49 Accepted Submission(s) : 30
Now, scientists want to know whether or not there is a “Triangle Love” among N people. “Triangle Love” means that among any three people (A,B and C) , A loves B, B loves C and C loves A.
Your problem is writing a program to read the relationship among N people firstly, and return whether or not there is a “Triangle Love”.
1 #include<stdio.h> 2 #include<string.h> 3 #include<queue> 4 using namespace std; 5 const int MAXN=2010; 6 int map[MAXN][MAXN]; 7 int que[MAXN],flot,N,tot=0; 8 char c[MAXN][MAXN]; 9 queue<int>dl; 10 void topsort(){ 11 for(int i=1;i<=N;i++) 12 if(!que[i])dl.push(i); 13 //printf("%d",dl.size()); 14 //puts("asfaf"); 15 while(!dl.empty()){ 16 int k=dl.front(); 17 flot++; 18 dl.pop(); 19 que[k]=-1; 20 // printf("%d",dl.size()); 21 for(int j=1;j<=N;j++){ 22 if(map[k][j])que[j]--; 23 if(!que[j])dl.push(j); 24 } 25 } 26 // puts("asfaf"); 27 if(flot==N)printf("Case #%d: No\n",tot); 28 else printf("Case #%d: Yes\n",tot); 29 } 30 void initial(){ 31 memset(que,0,sizeof(que)); 32 while(!dl.empty()){ 33 dl.pop(); 34 } 35 flot=0; 36 } 37 int main(){ 38 int T; 39 scanf("%d",&T); 40 while(T--){ 41 tot++; 42 initial(); 43 scanf("%d",&N); 44 //puts("asfaf"); 45 //printf("%d\n",N); 46 for(int i=0;i<N;i++)scanf("%s",c[i]); 47 for(int i=1;i<=N;i++){ 48 for(int j=1;j<=N;j++){ 49 map[i][j]=c[i-1][j-1]-'0'; 50 if(map[i][j])que[j]++; 51 } 52 } 53 // puts("asfaf"); 54 /* for(int i=1;i<=N;i++){ 55 for(int j=1;j<=N;j++){ 56 printf("%d",map[i][j]); 57 } 58 puts(""); 59 }*/ 60 //puts("asfaf"); 61 topsort(); 62 } 63 return 0; 64 }