题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3342

Legal or Not

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7416    Accepted Submission(s):
3541

Problem Description
ACM-DIY is a large QQ group where many excellent acmers
get together. It is so harmonious that just like a big family. Every day,many
"holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to
exchange their ideas. When someone has questions, many warm-hearted cows like
Lost will come to help. Then the one being helped will call Lost "master", and
Lost will have a nice "prentice". By and by, there are many pairs of "master and
prentice". But then problem occurs: there are too many masters and too many
prentices, how can we know whether it is legal or not?

We all know a
master can have many prentices and a prentice may have a lot of masters too,
it's legal. Nevertheless,some cows are not so honest, they hold illegal
relationship. Take HH and 3xian for instant, HH is 3xian's master and, at the
same time, 3xian is HH's master,which is quite illegal! To avoid this,please
help us to judge whether their relationship is legal or not.

Please note
that the "master and prentice" relation is transitive. It means that if A is B's
master ans B is C's master, then A is C's master.

 
Input
The input consists of several test cases. For each
case, the first line contains two integers, N (members to be tested) and M
(relationships to be tested)(2 <= N, M <= 100). Then M lines follow, each
contains a pair of (x, y) which means x is y's master and y is x's prentice. The
input is terminated by N = 0.
TO MAKE IT SIMPLE, we give every one a number
(0, 1, 2,..., N-1). We use their numbers instead of their names.
 
Output
For each test case, print in one line the judgement of
the messy relationship.
If it is legal, output "YES", otherwise "NO".
 
Sample Input
3 2
0 1
1 2
2 2
0 1
1 0
0 0
 
Sample Output
YES
NO
 
题目大意:有N个人,给出M组两个人之间的师徒关系,问是否存在悖论,即某个人的徒弟又是自己的师傅。
 
解题思路:用拓扑排序判断图中是否存在环即可
 
AC代码:
 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
queue <int > q;
int line[][];
int in[];
int main ()
{
int i,j,m,n,num,u,v;
while (scanf("%d%d",&n,&m)!=EOF)
{
if (n == )
break;
memset(line,,sizeof(line));
memset(in,,sizeof(in)); for (i = ; i < m; i ++)
{
scanf("%d%d",&u,&v);
if (line[u][v]==) //判断重边
{
line[u][v] ++;
in[v] ++;
}
}
for (i = ; i < n; i ++)
if (in[i] == ) q.push(i); //入度为0的存入队列
num = ;
while (!q.empty())
{
int k = q.front();
q.pop();
num ++;
for (i = ; i < n; i ++)
{
if (line[k][i] > ) //删掉与该入度为0的节点相连的边
{
in[i] --;
if (in[i] == )
q.push(i);
}
}
}
if (num == n) //判断是否存在环
printf("YES\n");
else
printf("NO\n");
}
return ;
}

最新文章

  1. .Net框架2.0和4.0版本对比
  2. 51nod 1183 编辑距离(dp)
  3. MapReduce之单词计数
  4. P6 EPPM R16.1安装与配置指南(三)
  5. 【转】Android Drawable Resource学习(十一)、RotateDrawable
  6. FIFO分枝_限界算法
  7. Mac OS X 系统下快速显示隐藏文件的方法(使用Automator创建workflow)
  8. springcloud之服务注册与发现
  9. SVG路径path的贝塞尔曲线指令
  10. MySQL最基本的概念梳理
  11. eclipse经常出现——未响应!!!
  12. Nginx + 阿里云SSL + tomcat 实现https访问代理
  13. Postfix 邮件服务 - dovecot 服务
  14. pandas.io.common.CParserError: Error tokenizing data. C error: Expected 1 fields in line 526, saw 5
  15. Web安全 之 X-Frame-Options响应头配置
  16. 20165230 《Java程序设计》实验二(Java面向对象程序设计)实验报告
  17. spring对事务支持的三种形式
  18. 什么是awt ?
  19. python学习之os.walk()
  20. 【离散数学】 SDUT OJ 1.1联结词真值运算

热门文章

  1. Bootstrap &lt;基础五&gt;表格
  2. #Deep Learning回顾#之LeNet、AlexNet、GoogLeNet、VGG、ResNet
  3. A、B、C、D和E类IP地址
  4. extjs之apply
  5. 7月07日——[HouseStark] 团队简介
  6. c/c++面试题(7)零碎知识总结
  7. Selenium之(二)Junit单元测试框架
  8. 源码编译安装 MySQL 5.5.x 实践
  9. ajax绑定
  10. [Python学习笔记1]Python语言基础 数学运算符 字符串 列表