原题链接:http://poj.org/problem?id=3259

题意

有个很厉害的农民,它可以穿越虫洞去他的农场,当然他也可以通过道路,虫洞都是单向的,道路都是双向的,道路会花时间,虫洞会倒退时间,问你这个农民可不可以回到起点,并且在他出发的时间之前。

题解

就虫洞用负边链接,然后判断是否有负环即可。

代码

#include<iostream>
#include<cstring>
#include<vector>
#include<string>
#include<algorithm>
#include<queue>
#define INF 2500003
#define MAX_N 555
using namespace std; struct edge {
public:
int to, cost; edge(int t, int c) : to(t), cost(c) { } edge() { }
}; vector<edge> G[MAX_N];
int d[MAX_N];
queue<int> que;
bool inQue[MAX_N];
bool vis[MAX_N];
int n,m,w;
int cnt[MAX_N]; void init(){
for(int i=;i<=n;i++)G[i].clear();
fill(d,d+n+,INF);
memset(vis,,sizeof(vis));
while(que.size())que.pop();
memset(inQue,,sizeof(inQue));
memset(cnt,,sizeof(cnt));
} bool spfa(int s) {
que.push(s);
inQue[s] = ;
vis[s] = ;
d[s] = ;
cnt[s] = ;
while (que.size()) {
int u = que.front();
que.pop();
inQue[u] = ;
for (int i = ; i < G[u].size(); i++) {
int v = G[u][i].to;
int c = G[u][i].cost;
if (d[u] + c < d[v]) {
d[v] = d[u] + c;
if (!inQue[v]) {
inQue[v] = ;
que.push(v);
cnt[v]++;
if (cnt[v] > n)return true;
}
}
}
}
return false;
} int T; int main() {
cin.sync_with_stdio(false);
cin >> T;
while (T--) {
cin >> n >> m >> w;
init();
for (int i = ; i < m; i++) {
int u, v, c;
cin >> u >> v >> c;
G[u].push_back(edge(v, c));
G[v].push_back(edge(u, c));
}
for (int i = ; i < w; i++) {
int u, v, c;
cin >> u >> v >> c;
G[u].push_back(edge(v, -c));
}
bool flag = false;
for (int i = ; i < n; i++)
if (!vis[i]) {
flag = spfa(i);
if (flag)
break;
}
if (flag)cout << "YES" << endl;
else cout << "NO" << endl;
}
return ;
}

POJ 3259 Wormholes 最短路+负环的更多相关文章

  1. POJ 3259 Wormholes (判负环)

    Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 46123 Accepted: 17033 Descripti ...

  2. POJ 3259 Wormholes(SPFA判负环)

    题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...

  3. POJ 3259 Wormholes( bellmanFord判负环)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 36425   Accepted: 13320 Descr ...

  4. POJ 3259 Wormholes ( SPFA判断负环 && 思维 )

    题意 : 给出 N 个点,以及 M 条双向路,每一条路的权值代表你在这条路上到达终点需要那么时间,接下来给出 W 个虫洞,虫洞给出的形式为 A B C 代表能将你从 A 送到 B 点,并且回到 C 个 ...

  5. POJ 3259 Wormholes 虫洞(负权最短路,负环)

    题意: 给一个混合图,求判断是否有负环的存在,若有,输出YES,否则NO.有重边. 思路: 这是spfa的功能范围.一个点入队列超过n次就是有负环了.因为是混合图,所以当你跑一次spfa时发现没有负环 ...

  6. Wormholes POJ 3259(SPFA判负环)

    Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...

  7. poj 3259 Wormholes(最短路 Bellman)

    题目:http://poj.org/problem?id=3259 题意:一个famer有一些农场,这些农场里面有一些田地,田地里面有一些虫洞,田地和田地之间有路,虫洞有这样的性质: 时间倒流.问你这 ...

  8. POJ 3259 Wormholes (最短路)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34302   Accepted: 12520 Descr ...

  9. ACM: POJ 3259 Wormholes - SPFA负环判定

     POJ 3259 Wormholes Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu   ...

随机推荐

  1. jquery中arrt()和prop()的区别

    在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同. 但不得不说的是,这两个函数的用处却并不相同.下面我们来详细介绍这两个函数之间的区别. ...

  2. zoj 4054

    #define ll long long ; int t; ll ans,tmp; char s[N]; int main() { scanf("%d",&t); whil ...

  3. huu 1251

    #include <iostream> #include <cstdio> #include <cstring> #include <string> # ...

  4. 面试(手打手写,待更新loading...)

    1)JAVA基础面试 1,引用数据类型和基本数据类型的区别是什么? Byte 1 short 2 int 4 long 8 Boolean 1 char 2 float 4 double 8. 基本数 ...

  5. 2015多校训练第二场 hdu5305

    把这题想复杂了,一直在考虑怎么快速的判断将选的边和已选的边无冲突,后来经人提醒发现这根本没必要,反正数据也不大开两个数组爆搜就OK了,搜索之前要先排除两种没必要搜的情况,这很容易想到,爆搜的时候注意几 ...

  6. BZOJ 2217: [Poi2011]Lollipop

    若sum可行 sum-2一定可行 序列和为ans 找出和ans奇偶性不同的最大的ans,即最靠左或最靠右的1的位置 更新答案 有spj #include<cstdio> using nam ...

  7. CodeForces 392C Yet Another Number Sequence 矩阵快速幂

    题意: \(F_n\)为斐波那契数列,\(F_1=1,F_2=2\). 给定一个\(k\),定义数列\(A_i=F_i \cdot i^k\). 求\(A_1+A_2+ \cdots + A_n\). ...

  8. 深入理解Java虚拟机(精华总结)

    作者:战斗民族就是干 转自:http://www.cnblogs.com/prayers/p/5515245.html 一.运行时数据区域 Java虚拟机管理的内存包括几个运行时数据内存:方法区.虚拟 ...

  9. 【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸

    多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在 ...

  10. TCP 中的三次握手和四次挥手

    Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...