因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢。所以只要所给的图中有一个环,那么一定存在一个三元环。

所以用拓扑排序判断一下图中是否有环就行了。

HDU 4324 (拓扑排序) Triangle LOVE_#includeHDU 4324 (拓扑排序) Triangle LOVE_题_02
 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 }
代码君