题意:

农夫约翰农场里发现了很多虫洞,他是个超级冒险迷,想利用虫洞回到过去,看再回来的时候能不能看到没有离开之前的自己,农场里有N块地,M条路连接着两块地,W个虫洞,连接两块地的路是双向的,而虫洞是单向的,去到虫洞之后时间会倒退T秒,如果能遇到离开之前的自己就输出YES,反之就是NO。

分析:

就是求一幅图中有没有负权环路, 可以bellman n-1次后再跑一次看看能不能更新, 能更新说明有环。

也可以spfa记录入队次数, 入队次数大于等于N说明有负权环路

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define rep(i,a,b) for(int i = a; i < b; i++)
#define _rep(i,a,b) for(int i = a; i <= b; i++)
using namespace std;
#define inf 0x3f3f3f3f
const int maxn = , maxm = ;
int N,M,W;
struct E
{
int v, time, nxt;
}Edge[maxm]; int cnt = ;
int head[maxn], enter_cnt[maxn];
int dis[maxn], vis[maxn];
void add_edge(int u , int v, int d){
Edge[cnt].v = v;
Edge[cnt].time = d;
Edge[cnt].nxt = head[u];
head[u] = cnt++;
}
bool spfa(){
fill(dis, dis+maxn, inf);
memset(vis, , sizeof(vis));
memset(enter_cnt, , sizeof(enter_cnt));
queue<int> q;
q.push();
dis[] = ;
vis[] = ;
enter_cnt[]++;
while(!q.empty()){
int u = q.front();
for(int i = head[u]; i != -; i = Edge[i].nxt){
int v = Edge[i].v, d = Edge[i].time;
if(dis[v] > dis[u] + d){
if(++enter_cnt[v] >= N) return false; //如果入队次数 >= N, 那么一定有负权环路
dis[v] = dis[u] + d;
if(!vis[v]){
vis[v] = ;
q.push(v);
}
}
}
vis[u] = ;
q.pop();
}
return true;
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
memset(head, -, sizeof(head));
cnt = ; scanf("%d %d %d", &N, &M, &W);
for(int i = ; i < M; i++)
{
int tu,tv,tt;
scanf("%d %d %d", &tu, &tv, &tt);
add_edge(tu,tv,tt);
add_edge(tv,tu,tt);
}
for(int i = ; i < W; i++)
{
int tu,tv,tt;
scanf("%d %d %d", &tu, &tv, &tt);
add_edge(tu,tv,-tt);
} if(!spfa()) printf("YES\n");
else printf("NO\n");
}
}

POJ 3259 Wormholes(负权环路)的更多相关文章

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

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

  2. POJ 3259 Wormholes(最短路径,求负环)

    POJ 3259 Wormholes(最短路径,求负环) Description While exploring his many farms, Farmer John has discovered ...

  3. 最短路(Bellman_Ford) POJ 3259 Wormholes

    题目传送门 /* 题意:一张有双方向连通和单方向连通的图,单方向的是负权值,问是否能回到过去(权值和为负) Bellman_Ford:循环n-1次松弛操作,再判断是否存在负权回路(因为如果有会一直减下 ...

  4. poj - 3259 Wormholes (bellman-ford算法求最短路)

    http://poj.org/problem?id=3259 农夫john发现了一些虫洞,虫洞是一种在你到达虫洞之前把你送回目的地的一种方式,FJ的每个农场,由n块土地(编号为1-n),M 条路,和W ...

  5. [ACM] POJ 3259 Wormholes (bellman-ford最短路径,推断是否存在负权回路)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29971   Accepted: 10844 Descr ...

  6. poj 3259 Wormholes 判断负权值回路

    Wormholes Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u   Java ...

  7. POJ 3259 Wormholes Bellman_ford负权回路

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

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

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

  9. POJ 3259 Wormholes(最短路,判断有没有负环回路)

    Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24249   Accepted: 8652 Descri ...

随机推荐

  1. 最短路之Dijkstra(迪杰斯特拉)

    一般用法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很有代 ...

  2. spring boot eureka server

    ServerApplication @EnableEurekaServer @SpringBootApplication public class ServerApplication { public ...

  3. Java | 基础归纳 | set

    用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复.

  4. python之迷宫BFS

    # @File: maze_queue_bfs from collections import deque maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0 ...

  5. 基于Tcp协议的上传下载

    目录格式: 构建此目录就可随意使用! client端 import socket import sys import os import json import struct sk = socket. ...

  6. Kruskal HDOJ 1863 畅通工程

    题目传送门 /* 此题为:HDOJ 1233 + HDOJ 1232 */ #include <cstdio> #include <algorithm> #include &l ...

  7. LVS集群-DR模式

    同上个实验一样,还是准备三台机器 分发器(sishen_63):eth0 192.168.1.63 RealServer1sishen_64) RealServer2sishen_65) 首先配置网卡 ...

  8. servlet基础概念

    一.servlet是什么? 运行在Web服务器上(如:tomcat),作为浏览器请求与数据库或其他应用程序之间的中间层 二.servlet主要任务: 1.读取浏览器发送的显式数据(如:html表单)隐 ...

  9. angularjs 下select中ng-options使用

    当我有一堆object数据要用下拉框进行显示选择时,可以使用到angularjs中的select中的ng-options的属性.官网网址:https://docs.angularjs.org/api/ ...

  10. C#之九大视图

    本节向大家介绍一下有关UML视图方面的内容,UML视图共有9种,它们之间有什么区别和联系呢,下面就让我们一起来学习吧,相信通过本节的介绍你一定会有不少收获. UML视图 UML总共提供了9种视图,这些 ...