题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5154

题解:

有向图判环。

1、用dfs,正在访问的节点标记为-1,已经访问过的节点标记为1,没有访问过的节点标记为0,如果访问到-1的节点说明说有环。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long LL; int n,m; const int maxm=+;
const int maxn=; struct Edge{
int v,ne;
Edge(int v,int ne):v(v),ne(ne){}
Edge(){}
}egs[maxm]; int head[maxn],tot;
int vis[maxn]; void addEdge(int u,int v){
egs[tot]=Edge(v,head[u]);
head[u]=tot++;
} bool dfs(int cur){
vis[cur]=-;
int p=head[cur];
while(p!=-){
Edge &e=egs[p];
if(vis[e.v]==){
if(dfs(e.v)) return true;
}
else if(vis[e.v]==-){
return true;
}
p=e.ne;
}
vis[cur]=;
return false;
} void init(){
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
tot=;
} int main(){
while(scanf("%d%d",&n,&m)==&&n){
init();
while(m--){
int u,v;
scanf("%d%d",&u,&v);
addEdge(u,v);
}
int su=;
for(int i=;i<=n;i++){
if(vis[i]==){
if(dfs(i)){
su=; break;
}
}
}
if(su) puts("YES");
else puts("NO");
}
return ;
}

2、拓扑排序。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
typedef long long LL; int n, m; const int maxm = + ;
const int maxn = ; struct Edge {
int v, ne;
Edge(int v, int ne) :v(v), ne(ne) {}
Edge() {}
}egs[maxm]; int head[maxn], tot;
int ind[maxn]; void addEdge(int u, int v) {
egs[tot] = Edge(v, head[u]);
head[u] = tot++;
} void init() {
memset(head, -, sizeof(head));
memset(ind, , sizeof(ind));
tot = ;
} int main() {
while (scanf("%d%d", &n, &m) == && n) {
init();
while (m--) {
int u, v;
scanf("%d%d", &u, &v);
addEdge(u, v);
ind[v]++;
}
queue<int> q;
for (int i = ; i <= n; i++) {
if (ind[i] == ) q.push(i);
}
while (!q.empty()) {
int u = q.front(); q.pop();
//printf("v:%d\n", v);
int p = head[u];
while (p != -) {
Edge& e = egs[p];
ind[e.v]--;
if (ind[e.v] == ) q.push(e.v);
p = e.ne;
}
}
int su = ;
for (int i = ; i <= n; i++) {
if (ind[i]) { su = ; break; }
}
if (su) puts("YES");
else puts("NO");
}
return ;
}

HDU 5154 Harry and Magical Computer 有向图判环的更多相关文章

  1. hdu 5154 Harry and Magical Computer

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5154 Harry and Magical Computer Description In reward ...

  2. hdu 5154 Harry and Magical Computer 拓扑排序

    Harry and Magical Computer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  3. HDU 3342 Legal or Not(有向图判环 拓扑排序)

    Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  4. (简单) HDU 5154 Harry and Magical Computer,图论。

    Description In reward of being yearly outstanding magic student, Harry gets a magical computer. When ...

  5. HDU 5154 Harry and Magical Computer bfs

    Harry and Magical Computer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  6. Dwarves (有向图判环)

    Dwarves 时间限制: 1 Sec  内存限制: 64 MB提交: 14  解决: 4[提交][状态][讨论版] 题目描述 Once upon a time, there arose a huge ...

  7. COJ 3012 LZJ的问题 (有向图判环)

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1042 试题描述: LZJ有一个问题想问问大家.他在写函数时有时候很头疼,如 ...

  8. CodeForces 937D 936B Sleepy Game 有向图判环,拆点,DFS

    题意: 一种游戏,2个人轮流控制棋子在一块有向图上移动,每次移动一条边,不能移动的人为输,无限循环则为平局,棋子初始位置为$S$ 现在有一个人可以同时控制两个玩家,问是否能使得第一个人必胜,并输出一个 ...

  9. 【HDOJ】5154 Harry and Magical Computer

    拓扑排序. /* 5154 */ #include <iostream> #include <cstdio> #include <cstring> #include ...

随机推荐

  1. 偏前端--之小白学习本地存储与cookie

    百度了很多都是讲的理论,什么小于4kb啊之类的,小白看了一脸懵逼复制到html中为什么没效果!!哈哈.我来写一个方便小白学习. 贴图带文字描述,让小白也运行起来,然后自己再去理解... 1. cook ...

  2. x01.os.24: 来点代码

    <Orange'S 一个操作系统的实现>源代码 <Linux 0.11 内核完全注释>源代码 linux-0.12 源代码:  解决了 Not Owner 问题 闲来无事,在 ...

  3. A1070

    给出总价和需求量,求最大收益. 思路:求单价最高的,排序. #include<cstdio> #include<algorithm> using namespace std; ...

  4. openssl windows 下 编译 bat

    ++++全部++++++++ @echo offrem set sslpath=C:\0openssl\rem echo %sslpath% set X86_lib=C:\0openssl\32\li ...

  5. drag element

    <div id="logDiv" draggable="true" style="border: 2px dotted red; width: ...

  6. 20155210潘滢昊 2016-2017-2 《Java程序设计》第4周学习总结

    20155210 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 extends:单一继承. 抽象方法.抽象类: abstract:Java中有抽象方法的类一 ...

  7. 2015526 《Java程序设计》实验二实验报告

    2015526 <Java程序设计>实验二实验报告 一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码( ...

  8. C语言 迭代部分的代码编写

    C语言代码学习 迭代部分 迭代要用到函数部分的知识,一开始我写了计算n!的计算,代码和运行结果如下: 结果只能单一的计算出整数内的值,如果输入负值则结果为返回值1,显然是不对的,根据查书学习以后,知道 ...

  9. 20155332 2016-2017-2 《Java程序设计》第10周学习总结

    20155332 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 了解计算机网络基础 掌握Java Socket编程 理解混合密码系统 掌握Java 密码技 ...

  10. 第五周 mybash的实现

    第五周 mybash的实现 1. 使用fork,exec,wait实现mybash 2. 写出伪代码,产品代码和测试代码 3. 发表知识理解,实现过程和问题解决的博客(包含代码托管链接) 1. for ...