POJ3259 Wormholes 找负环
2016-11-15 15:24
197 查看
题意:问能否从一个点出发回到这个点时花费变少,求负环, 有普通路(正权,双向) 和 虫洞路(负权,单向)
给定F(1<=F<=5)组数据,对应与一个farm,每组数据对应一个结果。
对于其中一组数据,给定 N , M , W ,N为点数,M为无向边数(普通路径,通过之后时间前进),W为有向边数(虫洞,通过虫洞之后时间倒退),求每组数据是否存在一条回路能使时间倒退。
给定F(1<=F<=5)组数据,对应与一个farm,每组数据对应一个结果。
对于其中一组数据,给定 N , M , W ,N为点数,M为无向边数(普通路径,通过之后时间前进),W为有向边数(虫洞,通过虫洞之后时间倒退),求每组数据是否存在一条回路能使时间倒退。
#include <cstdio> #include <cstring> #include <iostream> #include <cstdlib> #include <queue> using namespace std; #define MAX_V (2525) #define MAX_E (6262) int V, E, EE, tot = 0; int first[MAX_V], nxt[MAX_E<<1], dis[MAX_V]; bool used[MAX_V]; struct edge{ int from, to, cost; }es[MAX_E<<1]; void build(int ff, int tt, int dd) { es[++tot] = (edge){ff,tt,dd}; nxt[tot] = first[ff]; first[ff] = tot; } #define INF (1e9) queue <int> q; int tim[MAX_V]; string spfa(int s) { fill(dis+1,dis+V+1,INF); dis[s] = 0; q.push(s); used[s] = 1; while(q.size()) { int x = q.front(); q.pop(); used[x] = 0; if(++tim[x] > V) return "YES"; for(int i = first[x]; i != -1; i = nxt[i]) { int v = es[i].to; if(dis[v] > dis[x] + es[i].cost) { dis[v] = dis[x] + es[i].cost; if(!used[v]) { q.push(v); used[v] = 1; } } } } return "NO"; } int main() { int T; cin >> T; while(T --) { tot = 0; memset(first,-1,sizeof(first)); memset(nxt,0,sizeof(nxt)); memset(used,0,sizeof(used)); memset(es,0,sizeof(es)); memset(tim,0,sizeof(tim)); while(q.size()) q.pop(); scanf("%d%d%d", &V, &E, &EE); for(int i = 1; i <= E; ++ i) { int f, t, d; scanf("%d%d%d", &f, &t, &d); build(f,t,d); build(t,f,d); } for(int i = 1; i <= EE; ++ i) { int f, t, d; scanf("%d%d%d", &f, &t, &d); build(f,t,-d); } cout << spfa(1) << '\n'; } return 0; }
相关文章推荐
- POJ3259 Wormholes 【SPFA判断负环】
- POJ3259 Wormholes(Bellmanford判断负环)
- poj3259 Wormholes(floyd||spfa判断负环)
- POJ3259 Wormholes 洛谷P3385 【模板】负环
- POJ3259 - Wormholes(连通图判断负环)
- POJ3259 Wormholes(spfa判断负环模板题)
- POJ3259 Wormholes(最短路,有无负环,spfa,模板)
- Wormholes---poj3259(最短路 spfa 判断负环 模板)
- POJ3259-Wormholes(SPFA 判负环)
- POJ3259---Wormholes(最短路:验证存在负环)
- Poj3259 Wormholes (找负环)
- POJ3259----Wormholes(SPFA判断负环)
- [poj3259]Wormholes(spfa判负环)
- POJ3259 - Wormholes - 最短路判负环
- POJ 3259 Wormholes【bellman_ford判断负环——基础入门题】
- poj3259,简单判断有无负环,spfa
- BZOJ1715: [Usaco2006 Dec]Wormholes 虫洞 spfa 求负环
- poj 3259 Wormholes【spfa判负环】
- poj3259 Wormholes
- 【bzoj1715/Usaco2006 Dec】Wormholes 虫洞——SPFA判负环