hdu4324 Triangle LOVE(拓扑排序)
2016-02-02 16:26
363 查看
题意:给一个图,问存不存在三个顶点构成的环
思路:直接建图然后看看能否拓扑排序,可以拓扑排序则必定满足图是有向的并且不存在环
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
思路:直接建图然后看看能否拓扑排序,可以拓扑排序则必定满足图是有向的并且不存在环
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxn=2000+10; int n; vector<int> G[maxn]; int in[maxn]; bool topo() { queue<int> Q; for(int i=0;i<n;i++) if(!in[i]) Q.push(i); int sum=0; while(!Q.empty()) { int u=Q.front(); Q.pop(); sum++; for(int i=0;i<G[u].size();i++) { int v=G[u][i]; if(--in[v]==0) Q.push(v); } } return sum==n; } int main() { int T; scanf("%d",&T); for(int kase=1;kase<=T;kase++) { scanf("%d",&n); memset(in,0,sizeof(in)); for(int i=0;i<n;i++) { G[i].clear(); char str[maxn]; scanf("%s",str); for(int j=0;j<n;j++)if(str[j]=='1') { G[i].push_back(j); in[j]++; } } printf("Case #%d: %s\n",kase,topo()?"No":"Yes"); } return 0; }
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
相关文章推荐
- C语言盲点笔记1
- Git的origin和master分析
- 布隆过滤器
- Linux 下安装Mysql5.7
- 2.8 子查询解嵌套
- PL/SQL编程学习之开篇
- 2.7 视图合并
- PHP命名空间
- 编写基于dbscan的GPS数据热点区域分析(一)
- Linux目录结构及文件操作
- nginx学习六 高级数据结构之双向链表ngx_queue_t
- .net 滚动效果
- 亚马逊-不一样的电商公司
- linux上TCP connection timeout的原因查找
- 2.6 查询转换
- 2.5 SGA-缓冲区缓存
- 8张图理解Java
- android 调用相机和获取相册图片
- 2.2 SGA-共享池
- mongodb的 failindexkeytoolong