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 ...
随机推荐
- Percona Live 2016 PPT整理-zhaiwx_yinfeng
https://yq.aliyun.com/articles/54454?spm=5176.100239.bloglist.32.CllwIr
- Android带参数链接请求服务器
public void taste() { //设默认值 SharedPreferences.Editor editor = this.getSharedPreferences("setti ...
- java.util 中的property
学习中 两个博客: http://swiftlet.net/archives/1023 http://www.cnblogs.com/lingiu/p/3468464.html
- jsonp Ajax跨域请求
什么是JSONP? JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域 ...
- OC语法简写
NSNumber [NSNumber numberWithInt:666] 等价于 @666 [NSNumber numberWithLongLong:666ll] 等价于 @666ll [NSNum ...
- [!] CocoaPods was not able to update the `master` repo...
输入pod install之后出现: [!] CocoaPods was not able to update the `master` repo. If this is an unexpected ...
- 想追赶.Net的脚步?Java面前障碍重重
待到Java 8面世之时 .Net的进度时钟恐怕已经又走过了两到五年——届时微软做出的调整将使二者差距进一步拉大. 就在几周之前,我详细介绍了Java 8中值得期待的几大主要功能.不过当时我并没有提到 ...
- jQuery 如何创建基本插件(翻译)
有时候,你希望有一块功能在整个代码当中都可以使用.例如,你可能想要有一个单一的方法可以在jQuery选择器上进行调用,用于处理该选择器上的一系列操作.又或许你编写了一个十分有用的工具函数,并希望能够简 ...
- 3 Longest Substring Without Repeating Characters(最长不重复连续子串Medium)
题目意思:求字符串中,最长不重复连续子串 思路:使用hashmap,发现unordered_map会比map快,设置一个起始位置,计算长度时,去减起始位置的值 eg:a,b,c,d,e,c,b,a,e ...
- 插入数据显示 Duplicate entry '4913' for key 'user_id'
提示信息翻译:插入4913 使索引重复 分析:索引如果是primary unique这两两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯一性.否则就会产生这个错误. 一般发生在对数据库写操 ...