hdoj 4324 Triangle LOVE 【拓扑】
Triangle LOVE
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”.
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).
Take the sample output for more details.
2
5
00100
10000
01001
11101
11000
5
01111
00000
01000
01100
01110
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 【拓扑】的更多相关文章
- hdoj 4324 Triangle LOVE【拓扑排序判断是否存在环】
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 拓扑排序/DFS HDOJ 4324 Triangle LOVE
题目传送门 题意:判三角恋(三元环).如果A喜欢B,那么B一定不喜欢A,任意两人一定有关系连接 分析:正解应该是拓扑排序判环,如果有环,一定是三元环,证明. DFS:从任意一点开始搜索,搜索过的点标记 ...
- HDU 4324 Triangle LOVE 拓扑排序
Problem Description Recently, scientists find that there is love between any of two people. For exam ...
- hdu 4324 Triangle LOVE
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4324 Triangle LOVE Description Recently, scientists f ...
- HDU 4324 Triangle LOVE (拓扑排序)
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- hdu 4324 Triangle LOVE(拓扑判环)
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) To ...
- hdu 4324 Triangle LOVE(拓扑排序,基础)
题目 /***************************参考自****************************/ http://www.cnblogs.com/newpanderking ...
- HDU - 4324 Triangle LOVE(拓扑排序)
https://vjudge.net/problem/HDU-4324 题意 每组数据一个n表示n个人,接下n*n的矩阵表示这些人之间的关系,输入一定满足若A不喜欢B则B一定喜欢A,且不会出现A和B相 ...
- HDU 4324 Triangle LOVE【拓扑排序】
题意:给出n个人,如果a喜欢b,那么b一定不喜欢a,如果b不喜欢a,那么a一定喜欢b 就是这n个点里面的任意两点都存在一条单向的边, 所以如果这n个点不能构成拓扑序列的话,就一定成环了,成环的话就一定 ...
随机推荐
- Base64编码 概念和用途
Base64概念 什么是Base64? 依照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把随意序列的8位字节描写叙述为一种不易被人直接识别的形式.(The Base6 ...
- thinkphp3.2 代码生成并点击验证码
本人小菜鸟一仅仅.为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...
- 转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
特此声明:在本文中,引用另一篇文章和帖子,结合的概括的理解malloc()函数的实现机制. 我们常常会在C程序中调用malloc()函数动态分配一块连续的内存空间并使用它们.那么,这些用户空间发生的事 ...
- Ping azure
最近azure在虚拟机上打开(欧式世纪互联),这其实并不能ping虚拟机! 查了一下资料,发现azure不支持被ping这个功能(貌似是不开放ICMP-in这个协议).有些用户跟客服问过这个问题,可是 ...
- winmd文件和dll文件的区别
今天在研究一个二维码项目,用到一个第三方组件 ZXing,因为做的是Windows应用商店程序,应用商店程序是可以引用winmd文件也可以引用dll文件,但是这两种文件ZXing都提供了,最后和同事讨 ...
- slf自己主动绑定实现类过程推断
依照绑定实现类的方式是基于约定原则:推断分下面几个步骤 1.LoggerFactory扫描实现类路径有几个实现类,即在org/slf4j/impl/下有几个StaticLoggerBinder.cla ...
- 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)
主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...
- C# WinForm中实现CheckBox全选反选功能
今天一群里有人问到这个功能,其实应该挺简单,但提问题的人问题的出发点并没有描述清楚.因此,一个简简单单的需求,就引起了群内热烈的讨论.下面看看这个功能如何去实现,先上效果: 下面直接上代码,请不要在意 ...
- 安装、设置与启动MySql绿色版的方法
原文:安装.设置与启动MySql绿色版的方法 1.解压 mysql-noinstall-5.1.30-win32.zip(下载地址http://dev.mysql.com/downloads/mysq ...
- Android分享到微信等社交平台教程
在Android手机app上增加分享到微信等平台的功能,使用的是第三方的开源组件,友推SDK. 集成分为下面几个步骤: 1. 在友推官网注冊,加入要集成友推sdk的 app信息,并获取appkey. ...