HDU 4324 Triangle LOVE(拓扑排序)
2017-07-05 08:16
441 查看
Triangle LOVE
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 4867 Accepted Submission(s): 1917
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
Author
BJTU
题意:给你喜欢关系,判断有没有三角恋。
思路:拓扑排序判断有没有环。
#include<iostream> #include<cstdio> #include<string.h> using namespace std; int n; char map[2001][2001]; int indegree[2001]; int cnt; void toposort() { for(int i=1;i<=n;i++) { int flag=0; for(int j=1;j<=n;j++) { if(indegree[j]==0) { cnt++; flag=1; indegree[j]--; for(int k=1;k<=n;k++) { if(map[j][k]=='1') indegree[k]--; } break; } } if(!flag) break; } } int main() { int t; scanf("%d",&t); for(int g=1;g<=t;g++) { scanf("%d",&n); memset(indegree,0,sizeof(indegree)); for(int i=1;i<=n;i++) { scanf("%s",map[i]+1); for(int j=1;j<=n;j++) if(map[i][j]=='1') indegree[j]++; } cnt=0; toposort(); cout<<"Case #"<<g<<": "; if(cnt==n) cout<<"No"<<endl; else cout<<"Yes"<<endl; } return 0; }
相关文章推荐
- HDU 4324 CODE[VS] 2066 triangle love(拓扑排序)
- HDU 4324:Triangle LOVE( 拓扑排序 )
- hdu 4324 Triangle LOVE(拓扑排序)
- HDU 4324 (拓扑排序) Triangle LOVE
- HDU 4324 Triangle LOVE(拓扑排序)
- HDU 4324 Triangle LOVE 拓扑排序
- HDU 4324 Triangle LOVE(拓扑排序)
- HDU 4324 Triangle LOVE(拓扑排序)
- HDU-4324 Triangle LOVE 拓扑排序
- hdu 4324 Triangle LOVE(拓扑排序)
- HDU 4324 Triangle LOVE(拓扑排序)
- hdu 4324 Triangle LOVE 拓扑排序
- HDU 4324:Triangle LOVE【拓扑排序】
- HDU 4324 Triangle LOVE (拓扑排序)
- HDU 4324 Triangle LOVE (拓扑排序)
- hdu 4324 Triangle LOVE(拓扑排序)
- HDU 4324 Triangle LOVE 【拓扑排序】
- [HDU 4324] Triangle LOVE (拓扑排序,DFS)
- hdu 4324 Triangle LOVE 拓扑排序
- HDU 4324:Triangle LOVE( 拓扑排序 )