HDU NO.4324 Triangle LOVE(拓扑排序)
2016-04-16 16:27
260 查看
题意:
如果A爱B,那么B就一定不爱A --!.
大致意思是,在图中能不能找到三角环。
原题描述:
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). A i,j = 1 means i-th people loves j-th people, otherwise A i,j = 0.
It is guaranteed that the given relationship is a tournament, that is, A i,i= 0, A i,j ≠ A j,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
Sample Output
思路:
可以吧图中是“1”的坐标构成有向图,然后拓扑排序,如果结果没有拓扑序列即有环也就是存在三角恋 --!
代码:
如果A爱B,那么B就一定不爱A --!.
大致意思是,在图中能不能找到三角环。
原题描述:
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). A i,j = 1 means i-th people loves j-th people, otherwise A i,j = 0.
It is guaranteed that the given relationship is a tournament, that is, A i,i= 0, A i,j ≠ A j,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
思路:
可以吧图中是“1”的坐标构成有向图,然后拓扑排序,如果结果没有拓扑序列即有环也就是存在三角恋 --!
代码:
#include<iostream> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cmath> #include<queue> #include<stack> #include<cstring> #include<string> #include<vector> #include<set> using namespace std; #define X first #define Y second const int INF = 0x3f3f3f3f; const int MAX = 3000; int head[MAX], indegree[MAX], que[MAX]; int top, n; struct node{ int to, w, next; }edge[MAX * MAX]; void add_edge(int u, int v) { edge[top].to = v; edge[top].next = head[u]; head[u] = top++; } void init(){ top = 0; memset(head, -1, sizeof(head)); memset(indegree, 0, sizeof(indegree)); } bool Topsort(){ int iq = 0; for(int i = 0; i < n; i++) if(indegree[i] == 0) que[iq++] = i; for(int i = 0; i < iq; i++){ for(int j = head[que[i]]; j != -1; j = edge[j].next){ indegree[edge[j].to]--; if(indegree[edge[j].to] == 0) que[iq++] = edge[j].to; } } if(iq < n - 1) return true; else return false; } int main(){ int t, cns = 1; scanf("%d", &t); while(t--){ init(); scanf("%d", &n); char arr ; for(int i = 0; i < n; i++){ scanf("%s", &arr[i]); for(int j = 0; j < n; j++){ if(arr[i][j] == '1'){ add_edge(i, j); indegree[j]++; } } } int res = Topsort(); if(res) printf("Case #%d: Yes\n", cns++); else printf("Case #%d: No\n", cns++); } return 0; }
相关文章推荐
- python中enumerate 函数
- vim支持lua
- xcode7下多出来的告警修复
- Linux下信号量的P.V操作如何保证其原子性
- 分拣存储3-HashMap实现学生选课
- Git客户端TortoiseGit(Windows系统)的使用方法
- uva11584
- linux下运行eclipse出错的解决方法
- ACM-2008 数值统计
- 【USACO题库】3.3.3 Camelot亚瑟王的宫殿
- 响应式设计
- 题目1002:Grading
- Activity的生命周期和启动模式
- sql server 数据库mdf与ldf文件的导入
- Qt应用程序自动重启(零零散散)
- linux常用命令
- nyoj 63 小猴子下落(二叉树)
- 判断平年闰年
- struct和typedef struct的区别
- 大脑的惰性