Triangle LOVE

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

Total Submission(s): 2586    Accepted Submission(s): 1051
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

题意:给出你全部人的关系。然后让你推断一下是否存在三角恋或多角恋。

分析:我们能够依据关系建一个有向图,假如A喜欢B那么就让A指向B。假如存在三角恋或多角恋那么肯定会形成一个环,我选择用拓扑排序,假设形成环的话肯定不会把全部的数都排序。

注意:用链式前向星的话,边的数组要开到2000*1999之上。。RE了好几次。

心得: 比赛的时候没有想到拓扑。仅仅是想到了并查集。左后还是没有做出来。

并查集能够推断一棵树是不是成环,拓扑才干够推断一个图是不是成环。

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define M 2005
struct node{
int to, next;
}s[20000005];
int in[M], head[M], n, tot, queue[M];
char map[M][M];
void getmap(int a, int b){
s[tot].to = b;
in[b]++;
s[tot].next = head[a];
head[a] = tot++;
}
int toposort(){
bool vis[M];
memset(vis, false, sizeof(vis));
int i, j, iq = 0;
for(i = 0; i < n; i ++){
if(!in[i]){
queue[iq++] = i;
vis[i] = 1;
}
}
for(i = 0; i < iq; i++){
int temp = head[queue[i]];
for(j = temp; j != -1; j = s[j].next){
if(!(--in[s[j].to])){
queue[iq++] = s[j].to;
}
}
}
if(iq < n) return 1;
else return 0;
}
int main(){
int t, v = 1;
scanf("%d", &t);
while(t --){
memset(in, 0, sizeof(in));
memset(head, -1, sizeof(head));
tot = 0;
scanf("%d", &n);
int i, j, flag;
for(i = 0; i < n; i ++){
scanf("%s", map[i]);
for(j = 0; j < n; j ++){
if(map[i][j] == '1'){
getmap(i, j);
}
}
}
printf("Case #%d: ", v++);
flag = toposort();
if(flag) printf("Yes\n");
else printf("No\n");
}
return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

hdoj 4324 Triangle LOVE 【拓扑】的更多相关文章

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

    Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  2. 拓扑排序/DFS HDOJ 4324 Triangle LOVE

    题目传送门 题意:判三角恋(三元环).如果A喜欢B,那么B一定不喜欢A,任意两人一定有关系连接 分析:正解应该是拓扑排序判环,如果有环,一定是三元环,证明. DFS:从任意一点开始搜索,搜索过的点标记 ...

  3. HDU 4324 Triangle LOVE 拓扑排序

    Problem Description Recently, scientists find that there is love between any of two people. For exam ...

  4. hdu 4324 Triangle LOVE

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4324 Triangle LOVE Description Recently, scientists f ...

  5. HDU 4324 Triangle LOVE (拓扑排序)

    Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  6. hdu 4324 Triangle LOVE(拓扑判环)

    Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  7. hdu 4324 Triangle LOVE(拓扑排序,基础)

    题目 /***************************参考自****************************/ http://www.cnblogs.com/newpanderking ...

  8. HDU - 4324 Triangle LOVE(拓扑排序)

    https://vjudge.net/problem/HDU-4324 题意 每组数据一个n表示n个人,接下n*n的矩阵表示这些人之间的关系,输入一定满足若A不喜欢B则B一定喜欢A,且不会出现A和B相 ...

  9. HDU 4324 Triangle LOVE【拓扑排序】

    题意:给出n个人,如果a喜欢b,那么b一定不喜欢a,如果b不喜欢a,那么a一定喜欢b 就是这n个点里面的任意两点都存在一条单向的边, 所以如果这n个点不能构成拓扑序列的话,就一定成环了,成环的话就一定 ...

随机推荐

  1. Base64编码 概念和用途

    Base64概念 什么是Base64? 依照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把随意序列的8位字节描写叙述为一种不易被人直接识别的形式.(The Base6 ...

  2. thinkphp3.2 代码生成并点击验证码

    本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...

  3. 转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源

    特此声明:在本文中,引用另一篇文章和帖子,结合的概括的理解malloc()函数的实现机制. 我们常常会在C程序中调用malloc()函数动态分配一块连续的内存空间并使用它们.那么,这些用户空间发生的事 ...

  4. Ping azure

    最近azure在虚拟机上打开(欧式世纪互联),这其实并不能ping虚拟机! 查了一下资料,发现azure不支持被ping这个功能(貌似是不开放ICMP-in这个协议).有些用户跟客服问过这个问题,可是 ...

  5. winmd文件和dll文件的区别

    今天在研究一个二维码项目,用到一个第三方组件 ZXing,因为做的是Windows应用商店程序,应用商店程序是可以引用winmd文件也可以引用dll文件,但是这两种文件ZXing都提供了,最后和同事讨 ...

  6. slf自己主动绑定实现类过程推断

    依照绑定实现类的方式是基于约定原则:推断分下面几个步骤 1.LoggerFactory扫描实现类路径有几个实现类,即在org/slf4j/impl/下有几个StaticLoggerBinder.cla ...

  7. 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)

    主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...

  8. C# WinForm中实现CheckBox全选反选功能

    今天一群里有人问到这个功能,其实应该挺简单,但提问题的人问题的出发点并没有描述清楚.因此,一个简简单单的需求,就引起了群内热烈的讨论.下面看看这个功能如何去实现,先上效果: 下面直接上代码,请不要在意 ...

  9. 安装、设置与启动MySql绿色版的方法

    原文:安装.设置与启动MySql绿色版的方法 1.解压 mysql-noinstall-5.1.30-win32.zip(下载地址http://dev.mysql.com/downloads/mysq ...

  10. Android分享到微信等社交平台教程

    在Android手机app上增加分享到微信等平台的功能,使用的是第三方的开源组件,友推SDK. 集成分为下面几个步骤: 1. 在友推官网注冊,加入要集成友推sdk的 app信息,并获取appkey. ...