POJ 3259 Wormholes(Bellman_Ford判负圈)
来源:互联网 发布:千寻网络位置服务 编辑:程序博客网 时间:2024/05/24 03:21
POJ 3259 Wormholes(Bellman_Ford判负圈)
http://poj.org/problem?id=3259
题意:
给你一个有向图,要你判断图中是否存在负权环.
分析:
建图,然后用Bellman_Ford判负圈的模板解即可.
注意负权的边是单向的,其他边是双向的.
注意刘汝佳的模板计算的是单源最短路径,我们如果想判断是否有负权环,需要添加一个超级源0号点.
如程序下面代码所示,添加0号顶点作为到达其他所有顶点的超级源:
- for(int i=1;i<=n;i++)
- BF.AddEdge(0,i,0);
AC代码:
#include<cstdio>#include<cstring>#include<queue>#include<vector>#include<algorithm>#define INF 1e9using namespace std;const int maxn=500+10;struct Edge{ int from,to,dist; Edge(int f,int t,int d):from(f),to(t),dist(d){}};struct BellmanFord{ int n,m; vector<Edge> edges; vector<int> G[maxn]; bool inq[maxn]; int cnt[maxn]; int d[maxn]; int p[maxn]; void init(int n) { this->n=n; for(int i=0;i<n;i++) G[i].clear(); edges.clear(); } void AddEdge(int from,int to,int dist) { edges.push_back(Edge(from,to,dist)); m=edges.size(); G[from].push_back(m-1); } bool negative_cycle() { memset(inq,0,sizeof(inq)); memset(cnt,0,sizeof(cnt)); queue<int> Q; for(int i=0;i<n;i++) d[i]= i==0?0:INF; Q.push(0); while(!Q.empty()) { int u =Q.front(); Q.pop(); inq[u]=false; for(int i=0;i<G[u].size();i++) { Edge &e=edges[G[u][i]]; if(d[e.to]> d[u]+e.dist) { d[e.to] = d[u]+e.dist; p[e.to] = G[u][i]; if(!inq[e.to]) { inq[e.to]=true; Q.push(e.to); if(++cnt[e.to]>n) return true; } } } } return false; }}BF;int main(){ int T; scanf("%d",&T); while(T--) { int n,m,w; scanf("%d%d%d",&n,&m,&w); BF.init(n+1); while(m--) { int u,v,d; scanf("%d%d%d",&u,&v,&d); BF.AddEdge(u,v,d); BF.AddEdge(v,u,d); } while(w--) { int u,v,d; scanf("%d%d%d",&u,&v,&d); BF.AddEdge(u,v,-d); } for(int i=1;i<=n;i++) BF.AddEdge(0,i,0); if(BF.negative_cycle()) printf("YES\n"); else printf("NO\n"); } return 0;}
0 0
- POJ 3259 Wormholes(Bellman_Ford判负圈)
- POJ 3259 Wormholes bellman_ford
- poj 3259 Wormholes (bellman_ford)
- POJ 3259 Wormholes (bellman_ford)
- POJ 3259 Wormholes (Bellman_Ford)
- poj 3259 Wormholes[ bellman_ford 判负环]
- Poj 3259 Wormholes(bellman_ford判负环)
- POJ-3259 Wormholes (bellman_ford算法)
- POJ 3259 Wormholes(最短路Bellman_Ford)
- POJ 3259:Wormholes:bellman_ford算法判负环
- POJ 3259 Wormholes (bellman_ford算法判负环)
- Wormholes (poj 3259 SPFA || Bellman_Ford 判负环)
- POJ 3259:Wormholes bellman_ford判定负环
- 【POJ 3259】Wormholes(最短路SPFA/Bellman_Ford)
- (POJ 3259)Wormholes 判断负环 bellman_ford 或者 spfa
- poj Wormholes最短路问题(bellman_ford)
- poj Wormholes(Bellman_ford寻找负权环)
- poj 3259 Wormholes(判负圈)
- Java集合框架的层次
- A multiplication game
- POJ 1182 :食物链(并查集)
- IOS7 MPMoviePlayerViewController横屏显示
- Eclipse背景颜色
- POJ 3259 Wormholes(Bellman_Ford判负圈)
- 拓扑排序算法
- 学习笔记二
- boj 407 第一次排位赛训练d bfs 找联通矩阵 最大正方形
- 剑指offer---二叉搜索树的实现(重点是删除)
- 各种基本数据结构和算法总结清单
- WIN 32 文本
- winform datetimepacker 开始日期 结束日期
- MFC如何使用开源Scintilla库?自动源码质量控制软件 iCode 编写全记录(一)