HDU4324 Triangle LOVE 【拓扑排序】

Triangle LOVE

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 2455    Accepted Submission(s): 997

Problem Description

Recently, scientists find that there is love between any of two people. For example, between A and B, if A don’t love B, then B must love A, vice versa. And there is no possibility that two people love each other, what a crazy world!

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”.

Input

The first line contains a single integer t (1 <= t <= 15), the number of test cases.

For each case, the first line contains one integer N (0 < N <= 2000).

In the next N lines contain the adjacency matrix A of the relationship (without spaces). Ai,j = 1 means i-th people loves j-th people, otherwise Ai,j = 0.

It is guaranteed that the given relationship is a tournament, that is, Ai,i= 0, Ai,j ≠ Aj,i(1<=i, j<=n,i≠j).

Output

For each case, output the case number as shown and then print “Yes”, if there is a “Triangle Love” among these N people, otherwise print “No”.

Take the sample output for more details.

Sample Input

2
5
00100
10000
01001
11101
11000
5
01111
00000
01000
01100
01110

Sample Output

Case #1: Yes
Case #2: No

不知道为什么只要成环就包括三角环。。

#include <stdio.h>
#include <string.h>
#define maxn 2002

bool map[maxn][maxn];
char buf[maxn];
int indegree[maxn], queue[maxn];

void addEdge(int n)
{
	int i, j;
	for(i = 0; i < n; ++i){
		scanf("%s", buf);
		for(j = 0; j < n; ++j)
			if(buf[j] == '0') map[i][j] = 0;
			else{
				map[i][j] = 1;
				++indegree[j];
			}
	}
}

bool topoSort(int n)
{
	int i, u, front = 0, back = 0;
	for(i = 0; i < n; ++i)
		if(!indegree[i]) queue[back++] = i;
	while(front != back){
		u = queue[front++];
		for(i = 0; i < n; ++i){
			if(map[u][i] && !--indegree[i])
				queue[back++] = i;
		}
	}
	return back == n;
}

int main()
{
	int t, n, cas = 1;
	scanf("%d", &t);
	while(t--){
		memset(indegree, 0, sizeof(indegree));
		scanf("%d", &n); addEdge(n);
		printf("Case #%d: ", cas++);
		if(!topoSort(n)) printf("Yes\n");
		else printf("No\n");
	}
	return 0;
}

HDU4324 Triangle LOVE 【拓扑排序】

时间: 2024-10-13 02:24:15

HDU4324 Triangle LOVE 【拓扑排序】的相关文章

HDU 4324:Triangle LOVE( 拓扑排序 )

Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2271    Accepted Submission(s): 946 Problem Description Recently, scientists find that there is love between any of two people. For

Triangle LOVE(拓扑排序)

Triangle LOVE Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other) Total Submission(s) : 49   Accepted Submission(s) : 30 Problem Description Recently, scientists find that there is love between any of two people. For exam

HDU4324 Triangle LOVE【拓扑排序】

Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2683    Accepted Submission(s): 1084 Problem Description Recently, scientists find that there is love between any of two people. Fo

hdu4324(拓扑排序)

Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 2138    Accepted Submission(s): 898 Problem Description Recently, scientists find that there is love between any of two people. For

hdoj 4324 Triangle LOVE【拓扑排序判断是否存在环】

Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 3566    Accepted Submission(s): 1395 Problem Description Recently, scientists find that there is love between any of two people. For

HDU 4324 Triangle LOVE (拓扑排序)

Triangle LOVE Problem Description Recently, scientists find that there is love between any of two people. For example, between A and B, if A don't love B, then B must love A, vice versa. And there is no possibility that two people love each other, wh

hdu 4324 Triangle LOVE(拓扑排序)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4324 Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 3858    Accepted Submission(s): 1516 Problem Description Recently, scientists f

HDU4324 - Triangle LOVE 拓补排序

HDU4324 - Triangle LOVE : http://acm.showproblemhdu.edu.cn/.php?pid=4324 标准的拓补排序,上代码 : #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 2010; int In[MAXN]; char Map[MAXN][MAXN]; int T,N; int

HDU 4324 (拓扑排序) Triangle LOVE

因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢.所以只要所给的图中有一个环,那么一定存在一个三元环. 所以用拓扑排序判断一下图中是否有环就行了. 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;