Wormholes 最短路判断有无负权值
Description
While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is BEFORE you entered the wormhole! Each of FJ's farms comprises N (1 ≤ N ≤ 500) fields conveniently numbered 1..N, M (1 ≤ M ≤ 2500) paths, and W (1 ≤ W ≤ 200) wormholes.
As FJ is an avid time-traveling fan, he wants to do the following: start at some field, travel through some paths and wormholes, and return to the starting field a time before his initial departure. Perhaps he will be able to meet himself :) .
To help FJ find out whether this is possible or not, he will supply you with complete maps to F (1 ≤ F ≤ 5) of his farms. No paths will take longer than 10,000 seconds to travel and no wormhole can bring FJ back in time by more than 10,000 seconds.
Input
Line 1 of each farm: Three space-separated integers respectively: N, M, and W
Lines 2..M+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: a bidirectional path between S and E that requires T seconds to traverse. Two fields might be connected by more than one path.
Lines M+2..M+W+1 of each farm: Three space-separated numbers (S, E, T) that describe, respectively: A one way path from S to E that also moves the traveler back T seconds.
Output
Sample Input
2
3 3 1
1 2 2
1 3 4
2 3 1
3 1 3
3 2 1
1 2 3
2 3 4
3 1 8
Sample Output
NO
YES
Hint
For farm 2, FJ could travel back in time by the cycle 1->2->3->1, arriving back at his starting location 1 second before he leaves. He could start from anywhere on the cycle to accomplish this.
#include<stdio.h>
#include<string.h>
#include<stdlib.h> const int EM = ;
const int VM = ;
const int INF = ;
struct node
{
int u,v,w;
}map[EM]; int cnt,dis[VM];
int n,m,k; void addedge(int au,int av,int aw)
{
map[cnt].u = au;
map[cnt].v = av;
map[cnt].w = aw;
cnt++;
} int Bellman_ford()
{
int flag ,i;
//初始化
for( i = ; i <= n; i++)
{
dis[i] = INF;
}
dis[] =; for( i = ; i <= n; i++)
{
flag = ;
for(int j = ; j < cnt; j++)
{
if(dis[map[j].v] > dis[map[j].u]+map[j].w)
{
dis[map[j].v] = dis[map[j].u]+map[j].w;
flag = ;
}
}
if(flag== ) break;
}
if(i == n+) return ;//若第n次还可以松弛说明存在负环
else return ;
} int main()
{
int t,u,v,w,ans;
scanf("%d",&t);
while(t--)
{
cnt = ;
scanf("%d %d %d",&n,&m,&k);
while(m--)
{
scanf("%d %d %d",&u,&v,&w);
//添加双向边
addedge(u,v,w);
addedge(v,u,w);
}
while(k--)
{
scanf("%d %d %d",&u,&v,&w);
//添加单向边
addedge(u,v,-w);
}
ans = Bellman_ford();
if(ans == )
printf("YES\n");
else printf("NO\n");
}
return ;
}
//spfa判断有无负环
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<queue>
using namespace std; const int MAX = ;
const int INF = ;
int n,m,w;
int map[MAX][MAX];
queue<int>que;
int inque[MAX];
int vexcnt[MAX];
int dis[MAX]; bool spfa()
{
memset(inque,,sizeof(inque));
memset(vexcnt,,sizeof(vexcnt));
for(int i = ; i <= n; i++)
dis[i] = INF;
dis[] = ;
que.push();
inque[] = ;
vexcnt[]++;
while(!que.empty())
{
int tmp = que.front();
que.pop();
inque[tmp] = ;
for(int i = ; i <= n; i++)
{
if(dis[tmp] < INF && dis[i] > dis[tmp] + map[tmp][i])
{
dis[i] = dis[tmp] + map[tmp][i];
if(inque[i] == )
{
inque[i] = ;
vexcnt[i]++;
que.push(i);
if(vexcnt[i] >= n)
{
return false;
}
}
}
}
}
return true;
}
int main()
{
int t;
int x,y,z;
scanf("%d",&t);
while(t--)
{
while(!que.empty())que.pop();
scanf("%d %d %d",&n,&m,&w);
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
{
if(i == j) map[i][j] = ;
else map[i][j] = INF;
}
for(int i = ; i <= m; i++)
{
scanf("%d %d %d",&x,&y,&z);
if(map[x][y] > z)
{
map[x][y] = z;
map[y][x] = z;
}
}
for(int i = ; i <= w; i++)
{
scanf("%d %d %d",&x,&y,&z);
if(map[x][y] > -z)
map[x][y] = -z;
}
if(spfa())
printf("NO\n");
else printf("YES\n");
}
return ;
}
<Bellman-Ford算法>
Wormholes 最短路判断有无负权值的更多相关文章
- poj 3259 bellman最短路推断有无负权回路
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36717 Accepted: 13438 Descr ...
- poj 3259 Wormholes 判断负权值回路
Wormholes Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java ...
- 非负权值有向图上的单源最短路径算法之Dijkstra算法
问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...
- Expm 10_1 带负权值边的有向图中的最短路径问题
[问题描述] 对于一个带负权值边的有向图,实现Bellman-Ford算法,求出从指定顶点s到其余顶点的最短路径,并判断图中是否存在负环. package org.xiu68.exp.exp10; p ...
- POJ-3259 Wormholes---SPFA判断有无负环
题目链接: https://vjudge.net/problem/POJ-3259 题目大意: 农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的 ...
- poj3259,简单判断有无负环,spfa
英语能力差!百度的题意才读懂!就是一个判断有无负环的题.SPFA即可.,注意重边情况!! #include<iostream> //判断有无负环,spfa #include<queu ...
- poj-3259 Wormholes(无向、负权、最短路之负环判断)
http://poj.org/problem?id=3259 Description While exploring his many farms, Farmer John has discovere ...
- 图之单源Dijkstra算法、带负权值最短路径算法
1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable< ...
- hdu 6201 transaction (最短路变形——带负权最长路)
题意: 给定n个城市的货物买卖价格, 然后给定n-1条道路,每条路有不同的路费, 求出从某两个城市买卖一次的最大利润. 利润 = 卖价 - (买价 + 路费) 样例数据, 最近是从第一个点买入, 第4 ...
随机推荐
- 基于SQL的日志分析工具myselect
基本介绍 程序开发者常常要分析程序日志,包括自己打印的日志及使用的其他软件打印的日志,如php,nginx日志等,linux环境下分析日志有一些内置命令能够使用,如grep,sort,uniq,awk ...
- Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- 安卓扫码:简单的ZXing使用记录
ZXing是Google提供的条形码.二维码等的生成.解析的库.最近工作需求去研究了一下,主要是研究怎么扫描二维码(QRCode).网上教程也不少,但大多看了不明所以,甚至看了半天都不知道解码到底从哪 ...
- Android 发送验证码 简易代码
效果 Activity ;//倒计时 private Timer timer; private Handler handler = new Handler() { public void handle ...
- codevs 3336 电话网络
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #defin ...
- python面对对象编程---------6:抽象基类
抽象基本类的几大特点: 1:要定义但是并不完整的实现所有方法 2:基本的意思是作为父类 3:父类需要明确表示出那些方法的特征,这样在写子类时更加简单明白 用抽象基本类的地方: 1:用作父类 2:用作检 ...
- Session深入理解
Session是在什么情况下产生的 客户端访问服务器端,服务器端为每个用户生成一个唯一的sessionId,是这样吗?sessionId的作用是什么? http://www.cnblogs.com/s ...
- My.Ioc 代码示例——Lifetime 和 ILifetimeScope
很多 Ioc 框架在创建对象的过程中,都会采取某种方式来缓存/复用/释放已构建的对象.在 My.Ioc 中,这个目的是通过 Lifetime/ILifetimeScope 来实现的.其中,Lifeti ...
- HTML5 History对象,Javascript修改地址栏而不刷新页面
一.History对象 History 对象包含用户(在浏览器窗口中)访问过的 URL. History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问. ...
- c#使用Microsoft Excel 12.0 object Libary导出的Excel文件office2003不能打开!!~~(分享)
-----转载:http://hi.baidu.com/zhang_zhu_1/item/f3d47d1f86bf037a70d5e87e 使用C#导出数据到Excel文件时,Excel 2007组件 ...