HDU 5154 Harry and Magical Computer 有向图判环
题目链接:
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 有向图判环的更多相关文章
- hdu 5154 Harry and Magical Computer
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5154 Harry and Magical Computer Description In reward ...
- hdu 5154 Harry and Magical Computer 拓扑排序
Harry and Magical Computer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- HDU 3342 Legal or Not(有向图判环 拓扑排序)
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- (简单) HDU 5154 Harry and Magical Computer,图论。
Description In reward of being yearly outstanding magic student, Harry gets a magical computer. When ...
- HDU 5154 Harry and Magical Computer bfs
Harry and Magical Computer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- Dwarves (有向图判环)
Dwarves 时间限制: 1 Sec 内存限制: 64 MB提交: 14 解决: 4[提交][状态][讨论版] 题目描述 Once upon a time, there arose a huge ...
- COJ 3012 LZJ的问题 (有向图判环)
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=1042 试题描述: LZJ有一个问题想问问大家.他在写函数时有时候很头疼,如 ...
- CodeForces 937D 936B Sleepy Game 有向图判环,拆点,DFS
题意: 一种游戏,2个人轮流控制棋子在一块有向图上移动,每次移动一条边,不能移动的人为输,无限循环则为平局,棋子初始位置为$S$ 现在有一个人可以同时控制两个玩家,问是否能使得第一个人必胜,并输出一个 ...
- 【HDOJ】5154 Harry and Magical Computer
拓扑排序. /* 5154 */ #include <iostream> #include <cstdio> #include <cstring> #include ...
随机推荐
- cookie,session,token
发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用 ...
- Myeclipse报错:The word is not correctly spelled
在eclipse下的Window--Preference输入spell,然后把第一个复选框“Enable spell checking"给去掉就可以了.
- 【Spark】编程实战之模拟SparkRPC原理实现自定义RPC
1. 什么是RPC RPC(Remote Procedure Call)远程过程调用.在Hadoop和Spark中都使用了PRC,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的 ...
- Go类型特性-学习笔记
1.组合 Go语言使用组合来完成类型的设计,设计某一类型时想要拥有其他类型的功能只需要将其他类型嵌入该类型即可. 2.接口 与其他语言不同的是,编译器会自动判断该类型是否符合某正在使用的接口,甚至不需 ...
- SpringBoot 启动报The Java Virtual Machine has not been configured to use the desired default character encoding (UTF-8)
解决方法: 启动的时候在VM中添加 Dfile.encoding=UTF-8 就好了!
- go-处理字符串导致内存溢出
今日用go来做字符的“+”连接操作,每次连接的字符串大致有10M左右,循环连接100次,直接导致go内存溢出了. // Text project main.go package main import ...
- 20155202 2016-2017-2 《Java程序设计》第4周学习总结
20155202 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 继承与多态: 子类和父类有(is a)关系,Role role1 =new Swordsma ...
- 20155210潘滢昊 2016-2017-2 《Java程序设计》第2周学习总结
20155210潘滢昊 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 %%:表示字符串中的%. %d:以十进制整数格式输出 %f:以十进制浮点式格式输出 % ...
- 20155304 2016-2017-2《Java程序设计》课程总结
20155304 2016-2017-2<Java程序设计>课程总结 (按顺序)每周作业链接汇总 预备作业1:对自己专业看法及.学习Java的期望,以及心中的师生关系 预备作业2:有关技能 ...
- sqlite3日期数据类型
一.sqlite3日期数据类型,默认用datetime解析(根据stackflow) 使用时注意三点: 1. 创建表时,字段 DT 的类型为 date 2. 插入数据时,DT字段直接为 str 类型 ...