poj 3259 Wormholes【spfa判负环】
来源:互联网 发布:php微商城 编辑:程序博客网 时间:2024/05/17 00:58
点击打开链接
题意: 给你个地图,很多条双向的路走着费时间, 然还有单向的虫洞返回时间,
问你能不能到达某个点时候时间比之前到达这个点时候之前,从而遇见之前的自己,达到时光旅行。
题解:
跑spfa 判断 负环就行。。 我现场竟然拿着floyd 狂怼几发, 都te 不过最后硬是floyd 怼过了。
floyd:
#include<iostream>#include<string>#include<stdio.h>#include<string.h>#include<map>#include<set>#include<queue>#include<math.h>#include<algorithm>#define ll long longusing namespace std;const int maxn=555;const int maxm=1e5+100;const int inf = 5000001;int dis[maxn][maxn];int n,m,w,T,a,b,val,ans;int floyd(){ for(int k=1;k<=n;++k){ for(int i=1;i<=n;++i){ for(int j=1;j<=n;++j){ if(dis[i][k]+dis[k][j]<dis[i][j]){ dis[i][j]=dis[i][k]+dis[k][j]; if(dis[i][i]<0) return 1; } } } } return 0;}int main(){ scanf("%d",&T); while(T--){ scanf("%d %d %d",&n,&m,&w); for(int i=1;i<=n;++i){ dis[i][i]=0; for(int j=i+1;j<=n;++j) dis[i][j]=dis[j][i]=inf; } for(int i=1;i<=m;++i){ scanf("%d %d %d",&a,&b,&val); if(val<dis[a][b]) dis[a][b]=dis[b][a]=val; } for(int i=1;i<=w;++i){ scanf("%d %d %d",&a,&b,&val); dis[a][b]=-val; } int ans=floyd(); if(ans)printf("YES\n"); else printf("NO\n"); } return 0;}
spfa:
#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <queue>using namespace std;const int inf=0xffffff;const int maxn=505;struct node{ int to,w,nxt;}edge[maxn*maxn];int n,m,w,T,cnt;int head[maxn];int dis[maxn];int v[maxn];int out[maxn];void addedge(int x,int y,int val){ edge[++cnt].to=y; edge[cnt].w=val; edge[cnt].nxt=head[x]; head[x]=cnt;}int spfa(int s){ for(int i=0;i<=n;++i) dis[i]=inf; memset(v,0,sizeof(v)); memset(out,0,sizeof(out)); queue<int>que; que.push(s); dis[s]=0; while(!que.empty()){ int u=que.front(); que.pop(); out[u]++;v[u]=0; if(out[u]>n) return 1; for(int i=head[u];i!=-1;i=edge[i].nxt){ int vv=edge[i].to; if(dis[vv]>dis[u]+edge[i].w){ dis[vv]=dis[u]+edge[i].w; if(!v[vv]){ v[vv]=1; que.push(vv); } } } } return 0;}int main(){ int a,b,c; scanf("%d",&T); while(T--){ cnt=0; memset(head,-1,sizeof(head)); scanf("%d %d %d",&n,&m,&w); while(m--){ scanf("%d %d %d",&a,&b,&c); addedge(a,b,c); addedge(b,a,c); } while(w--){ scanf("%d %d %d",&a,&b,&c); addedge(a,b,-c); } if(spfa(n))printf("YES\n"); else printf("NO\n"); } return 0;}
0 0
- 【POJ 3259】Wormholes 【spfa判负环】
- poj 3259--Wormholes 【spfa判负环】
- POJ 3259-Wormholes-SPFA判负环
- POJ 3259 Wormholes SPFA判负环
- poj 3259 Wormholes【spfa判负环】
- POJ 3259 Wormholes spfa判负环
- poj 3259 Wormholes //SPFA
- poj 3259 Wormholes SPFA
- POJ 3259 Wormholes(SPFA)
- Wormholes - POJ 3259 spfa
- poj 3259 Wormholes(spfa)
- POJ 3259:Wormholes 【SPFA】
- Wormholes POJ 3259【SPFA】
- poj 3259-- Wormholes(SPFA)
- POJ-3259 Wormholes(SPFA)
- Poj 3259 Wormholes ( SPFA
- POJ 3259 Wormholes spfa
- [POJ 3259] Wormholes [SPFA]
- C++ 常用容器系列【零】:总篇
- 感觉有点迷茫了
- 动态规划——最长递增子序列
- Linux打开vim编辑器
- MySQL权限系统
- poj 3259 Wormholes【spfa判负环】
- centos 安装MySQL
- UIWebView与WKWebView
- (十三)解析算术表达式
- ubuntu远程桌面连接windows系统
- ubuntu12.04编译Android 4.0.3 Source+Kernel记
- 欧拉函数euler
- TCP协议如何保证可靠传输
- 矩阵论:向量求导/微分和矩阵微分