poj 3259 Wormholes【Bellman-Ford Vs SPFA】
来源:互联网 发布:wampserver是什么软件 编辑:程序博客网 时间:2024/05/18 00:14
http://poj.org/problem?id=3259
用Bellman-Ford和SPFA均可以判负环。。。
SPFA
【856KB 125ms】
#include<iostream>#include<vector>#include<map>#include<stack>#include<algorithm>#include<queue>#include<list>#include<set>#include<string.h>#include<stdlib.h>#include<math.h>#include<stdio.h>#include<ctype.h>#include<iomanip>using namespace std;#define LL long long#define pi acos(-1)#define N 5000#define INF 999999999int n,m,w;int d[N];int cnt[N];int vis[N];struct node{ int to,time;};vector<node> v[N];void init(){ int i,j,k; int a,b,c; scanf("%d%d%d",&n,&m,&w); node p; for(i=1;i<=n;i++) { v[i].clear(); cnt[i]=0; vis[i]=0; d[i]=INF; } for(i=0;i<m;i++)//双向 { scanf("%d%d%d",&a,&b,&c); p.to=b,p.time=c; v[a].push_back(p); p.to=a,p.time=c; v[b].push_back(p); } for(i=0;i<w;i++)//单向 { scanf("%d%d%d",&a,&b,&c); p.to=b,p.time=-c; v[a].push_back(p); }}bool spfa(){ int i,j,k; queue<int> q; while(!q.empty())q.pop(); q.push(1); d[1]=0; cnt[1]=1; vis[1]=1; while(!q.empty()) { int top=q.front(); q.pop(); vis[top]=0; for(i=0;i<(int)v[top].size();i++) { int to=v[top][i].to; if(d[to]>d[top]+v[top][i].time) { d[to]=d[top]+v[top][i].time; if(!vis[to]) { vis[to]=1; cnt[to]++; if(cnt[to]>=n) return 1; q.push(to); } } } } return 0;}int main(){ // freopen("a.txt","r",stdin); int t; int i,j,k; while(scanf("%d",&t)!=EOF) { while(t--) { init(); if(spfa()) printf("YES\n"); else printf("NO\n"); } } return 0;}Bellman-Ford 【736KB 125ms】
#include<iostream>#include<vector>#include<map>#include<stack>#include<algorithm>#include<queue>#include<list>#include<set>#include<string.h>#include<stdlib.h>#include<math.h>#include<stdio.h>#include<ctype.h>#include<iomanip>using namespace std;#define LL long long#define pi acos(-1)#define N 5000#define INF 999999999int n,m,w;int cnt;int d[N];struct node{ int a,b,time;}e[N];bool fuck(){ int i,j,k; for(i=1;i<=n;i++) d[i]=INF; d[1]=0; for(i=1;i<n;i++) { for(j=1;j<=cnt;j++) if(d[e[j].b]>d[e[j].a]+e[j].time) d[e[j].b]=d[e[j].a]+e[j].time; } for(j=1;j<=cnt;j++) if(d[e[j].b]>d[e[j].a]+e[j].time) return 1; return 0;}void init(){ int i,j,k; cnt=0; int a,b,c; scanf("%d%d%d",&n,&m,&w); for(i=0;i<m;i++)//双向 { scanf("%d%d%d",&a,&b,&c); cnt++; e[cnt].a=a; e[cnt].b=b; e[cnt].time=c; cnt++; e[cnt].b=a; e[cnt].a=b; e[cnt].time=c; } for(i=0;i<w;i++)//单向 { scanf("%d%d%d",&a,&b,&c); cnt++; e[cnt].a=a; e[cnt].b=b; e[cnt].time=c*(-1); }}int main(){ // freopen("a.txt","r",stdin); int t; int i,j,k; while(scanf("%d",&t)!=EOF) { while(t--) { init(); if(fuck()) printf("YES\n"); else printf("NO\n"); } } return 0;}
- poj 3259 Wormholes【Bellman-Ford Vs SPFA】
- poj 3259 Wormholes(SPFA || Bellman-Ford)
- poj 3259 Wormholes SPFA // Bellman-ford
- POJ 3259 Wormholes (Bellman-ford或SPFA)
- Bellman-Ford||SPFA-POJ-3259-Wormholes
- POJ 3259 Wormholes (SPFA&&BellMan Ford)
- 【POJ】3259 Wormholes bellman-ford | SPFA
- POJ 3259 Wormholes(判断负权回路|SPFA||Bellman-Ford)
- POJ - 3259 Wormholes(判断负环, Bellman Ford,SPFA)
- POJ 3259 Wormholes (图论---最短路 Bellman-Ford || SPFA)
- POJ 3259 Wormholes(判断负环&(Bellman-Ford|SPFA))
- POJ 3259-Wormholes (Bellman-Ford&&SPFA) (模板题)
- POJ 3259-Wormholes(Bellman Ford或SPFA判负权值回路)
- Bellman-Ford || SPFA :Wormholes
- POJ 3259 Wormholes(bellman-ford)
- POJ 3259 Wormholes Bellman-Ford
- poj 3259 Wormholes(Bellman-Ford)
- POJ 3259 Wormholes (Bellman-ford)
- 中国人民银行研究生部考研经验谈
- ASP.NET 使用HttpContext.Current.Cache
- java新特性——读写锁ReadWriteLock
- Surround the Trees
- 新特性——读写锁ReadWriteLock (二)
- poj 3259 Wormholes【Bellman-Ford Vs SPFA】
- 多线程 消费者和生产者的问题
- Qt 寻找局域网机器的IP地址
- 令人无法淡定的Qt书----关于数据库模块
- 黑马程序员-生成随机数字
- matlab已知函数表达式和数据,求表达式中的系数
- Android开发之Shap自定义图形
- Delphi中强制IdHTTP使用HTTP1.1(转)
- Android3D游戏开发系列(2)色彩渲染和旋转