poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)
来源:互联网 发布:机房搬迁网络割接方案 编辑:程序博客网 时间:2024/05/16 19:41
poj 3259:
题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。
任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。
判断树中是否存在负权回路就ok了。
bellman代码:
#include<stdio.h>const int MaxN = 501;//农场数const int INF = 0x3f3f3f3f;int n;//点个数int l;//边标记struct edge{ int from; int to; int len;}e[5201];//2500条路径,2500*2条边+200个虫洞bool Bellman(){ int dis[MaxN]; for(int i = 1; i <= n; i++) dis[i] = INF; dis[1] = 0; for(int i = 1; i < n; i++) { bool over = true;//判断是否松弛完毕 for(int j = 0; j < l; j++) { int from = e[j].from; int to = e[j].to; int len = e[j].len; if(dis[from] != INF && dis[to] > dis[from] + len) { dis[to] = dis[from] + len; over = false; } } if(over) break; } for(int j = 0; j < l; j++) { int from = e[j].from; int to = e[j].to; int len = e[j].len; if(dis[to] > dis[from] + len) return true; } return false;}int main(){ //freopen("in.txt", "r", stdin); int ncase; int m, w; scanf("%d", &ncase); while(ncase--) { l = 0; scanf("%d%d%d", &n, &m, &w); int from, to, len; for(int i = 0; i < m; i++) { scanf("%d%d%d", &from, &to, &len); e[l].from = from; e[l].to = to; e[l++].len = len; e[l].from = to; e[l].to = from; e[l++].len = len; } for(int i = 0; i < w; i++) { scanf("%d%d%d", &from, &to, &len); e[l].from = from; e[l].to = to; e[l++].len = -len; } if(Bellman()) printf("YES\n"); else printf("NO\n"); } return 0;}
uva 558:
差不多的题目。
代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <climits>#include <cassert>#define LL long longusing namespace std;const int maxn = 1000 + 10;const int maxm = 2000 + 10;const int inf = 0x3f3f3f3f;struct Edge{ int fr, to, cost;} e[maxm];int n, m;bool bellman(){ int dis[maxn]; memset(dis, inf, sizeof(dis)); dis[0] = 0; for (int i = 0; i < n - 1; i++) { bool over = true; for (int j = 0; j < m; j++) { int fr = e[j].fr; int to = e[j].to; int cost = e[j].cost; if (dis[fr] != inf && dis[fr] + cost < dis[to]) { dis[to] = dis[fr] + cost; over = false; } } if (over) break; } for (int j = 0; j < m; j++) { int fr = e[j].fr; int to = e[j].to; int cost = e[j].cost; if (dis[fr] + cost < dis[to]) return true; } return false;}int main(){ #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL int ncase; scanf("%d", &ncase); while (ncase--) { scanf("%d%d", &n, &m); for (int i = 0; i < m; i++) { int u, v, w; scanf("%d%d%d", &u, &v, &w); e[i].fr = u; e[i].to = v; e[i].cost = w;// e[i + m].fr = v;// e[i + m].to = u;// e[i + m].cost = w; } if (bellman()) printf("possible\n"); else printf("not possible\n"); } return 0;}
0 0
- poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)
- poj 3259 bellman最短路判断有无负权回路
- POJ 3259 Wormholes(判断负权回路|SPFA||Bellman-Ford)
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,判断是否存在负权回路)
- PKU 3259 Wormholes - 判断负权回路 Bellman-Ford
- poj 3259 Wormholes(最短路+spfa+判负回路)
- POJ-3259 Wormholes(负权回路[Bellman-Ford])
- POJ 3259 Wormholes (Bellman) (负权回路)
- POJ 3259 Wormholes(最短路,判断有没有负环回路)
- POJ 3259 Wormholes (最短路 SPFA 判断负环)
- poj 3259 Wormholes (SPFA 判断有无负权回路)
- POJ 3259 Wormholes SPFA 判断负权回路
- POJ 3259Wormholes(SPFA算法判断负权回路)
- Poj 3259 Wormholes【SPFA判断负权回路】
- poj 3259 bellman-ford判断是否存在负权回路
- POJ 3259Wormholes(最短路bellman)
- uva 558 - Wormholes(Bellman Ford判断负环)
- uva 558 Wormholes (Bellman-Ford算法判断负环)
- 数字键盘添加自定义按钮
- HTTP状态码列表
- 字符排序
- 控制台主程序通过调用DLL显示对话框
- 总结分析LED照明灯具行业存在的几点普遍问题
- poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)
- liunux上ffmpeg编译
- 习近平勉励北大学生:人生就像扣扣子
- linux杂谈(十八):DNS服务器的配置(一)
- Hibernate的Criteria查询
- Github for Windows使用图文教程
- 淘宝销售技巧
- x264中I帧,P帧,B帧,PTS,DTS的含义
- Eclipse快捷键 10个最有用的快捷键