因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢。所以只要所给的图中有一个环,那么一定存在一个三元环。
所以用拓扑排序判断一下图中是否有环就行了。
1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 2000 + 10; 5 char G[maxn][maxn]; 6 int c[maxn]; 7 int n; 8 9 bool dfs(int u) 10 { 11 c[u] = -1; 12 for(int v = 0; v < n; v++) if(G[u][v] == '1') 13 { 14 if(c[v] < 0) return false; 15 if(!c[v] && !dfs(v)) return false; 16 } 17 c[u] = 1; 18 return true; 19 } 20 21 bool solve() 22 { 23 memset(c, 0, sizeof(c)); 24 for(int i = 0; i < n; i++) if(!c[i]) 25 if(!dfs(i)) return false; 26 return true; 27 } 28 29 int main() 30 { 31 //freopen("in.txt", "r", stdin); 32 33 int T; scanf("%d", &T); 34 for(int kase = 1; kase <= T; kase++) 35 { 36 scanf("%d", &n); 37 for(int i = 0; i < n; i++) scanf("%s", G[i]); 38 printf("Case #%d: %s\n", kase, solve() ? "No" : "Yes"); 39 } 40 41 return 0; 42 }