hdu_3342_拓扑排序判断是否有环
来源:互联网 发布:矩阵的1范数,2范数 编辑:程序博客网 时间:2024/05/22 06:52
Legal or Not
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
Source
HDOJ Monthly Contest – 2010.03.06
题意:
n个人为师傅徒弟关系,但是既当师傅又当徒弟是非法的,给了你m组关系,让发你判断是否合法,就是判断是否有环:
思路:
进行拓扑排序,统计入度为0的点
#include<iostream>#include<cstdio>#include<queue>#include<vector>using namespace std;int main(){ int n,m,i,j; while(cin>>n>>m &&(n+m)) { int mp[111][111]={0},in[111]={0}; while(m--) { int a,b; scanf("%d%d",&a,&b); mp[a][b]=1; } for(i=0;i<n;i++) for(j=0;j<n;j++) if(mp[i][j]) in[j]++; priority_queue<int ,vector<int>,greater<int> > q,p; for(i=0;i<n;i++) if(!in[i]) q.push(i); // cout<<q.top()<<"(("<<endl; while(!q.empty()) { int v=q.top(); q.pop(); p.push(v); for(i=0;i<n;i++) { if(!mp[v][i]) continue; in[i]--; if(!in[i]) q.push(i); } } int cnt=p.size(); if(cnt==n) puts("YES"); else puts("NO"); } return 0;}
- hdu_3342_拓扑排序判断是否有环
- 拓扑排序 判断是否有环
- 判断有向图是否有环及拓扑排序
- POJ 1094(拓扑排序 + 判断是否有环 + 是否有唯一解)
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- 拓扑排序(判断有向图是否有回路)
- poj 1094 拓扑排序(判断严格小于关系&判断是否有环)
- UVa 1572 拓扑排序 判断有向图是否有环
- 判断有向图是否有环之拓扑排序-LeetCode 207. Course Schedule
- 判断有向图是否存在回路—拓扑排序
- 拓扑排序(判断是否是有向无环图)
- 图中是否有环-->拓扑排序
- 拓扑排序(AOV)---判断图中是否有环---《数据结构》严蔚敏
- HDOJ 4324 Triangle LOVE(拓扑排序判断有向图是否存在环)
- HDOJ 3342 Legal or Not(拓扑排序判断有向图是否存在环)
- 判断有向图是否存在环的2种方法(深度遍历,拓扑排序)
- 拓扑排序<反向拓扑+有向环的判断>
- 统计指定类型文件行数
- 相对最后期限限制下的并行任务调度
- TensorFlow 学习笔记
- 数学体操 模运算
- 颜色定位和形态学定位改进后的mtcnn车牌定位算法
- hdu_3342_拓扑排序判断是否有环
- 剑指offer——python实现(面试必备)
- JZOJ2017.08.20B组
- spring源码分析(web)--通过注解获取bean源码分析
- python实现-求int型数据在内存中存储时1的个数
- 利用 Python 练习数据挖掘(鸢尾花练习)中遇到的问题,以及解决方法。
- ImageLoader源码解析(三) 线程调度
- DiskLruCache 达到最大设置的缓存,清理的逻辑
- Eigen实例操作