POJ 3259 Wormholes 虫洞(负权最短路,负环)
题意:
给一个混合图,求判断是否有负环的存在,若有,输出YES,否则NO。有重边。
思路:
这是spfa的功能范围。一个点入队列超过n次就是有负环了。因为是混合图,所以当你跑一次spfa时发现没有负环,但是负环仍可能存在,因为有向边!
但是单源最短路也有起点啊,难道穷举起点?不用,负环是必须有某些边是带负权的,那么我们只要穷举负权边的起点就行了,因为单单跑一次spfa不能保证能遍历所有点,但是如果穷举负权边起点还没有找到负环,那么负环不可能存在(剩下的都是正权,怎么可能有负环)。
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <deque>
#define LL long long
#define pii pair<int,int>
#define INF 0x7f7f7f7f
using namespace std;
const int N=;
int n, m, edge_cnt;
vector<int> vect[N];
struct node
{
int from, to, val;
node(){};
node(int f,int t,int v):from(f),to(t),val(v){};
}edge[]; void add_node(int from,int to,int val)
{
edge[edge_cnt]=node(from,to,val);
vect[from].push_back(edge_cnt++);
} int dis[N], inq[N], cnt[N];
int spfa(int s)//模板
{
memset(inq,,sizeof(inq));
memset(cnt,,sizeof(cnt));
memset(dis,0x7f,sizeof(dis));
deque<int> que(,s);
inq[s]=;
dis[s]=; while(!que.empty())
{
int x=que.front();
que.pop_front();
inq[x]=;
for(int i=; i<vect[x].size(); i++)
{
node e=edge[vect[x][i]];
if(dis[e.to]>dis[x]+e.val)
{
dis[e.to]=dis[x]+e.val;
if(!inq[e.to])
{
if(++cnt[e.to]>n) return false;
inq[e.to]=;
que.push_back(e.to);
}
}
}
}
return true;
} int main()
{
freopen("input.txt", "r", stdin);
int a, b, c, t, w;
cin>>t;
while(t--)
{
scanf("%d%d%d",&n,&m,&w);
edge_cnt=;
memset(edge,,sizeof(edge));
for(int i=; i<=n; i++) vect[i].clear(); for(int i=; i<m; i++) //无向边
{
scanf("%d%d%d",&a,&b,&c);
add_node(a,b,c);
add_node(b,a,c);
}
vector<int> ver;
for(int i=; i<w; i++) //有向
{
scanf("%d%d%d",&a,&b,&c);
add_node(a,b,-c);
ver.push_back(a);
}
int i;
for(i=; i<ver.size(); i++)
{
int q=ver[i];
if(!spfa(q))
{
puts("YES");
break;
}
}
if(i==ver.size()) puts("NO");
}
return ;
}
AC代码
POJ 3259 Wormholes 虫洞(负权最短路,负环)的更多相关文章
- poj - 3259 Wormholes (bellman-ford算法求最短路)
http://poj.org/problem?id=3259 农夫john发现了一些虫洞,虫洞是一种在你到达虫洞之前把你送回目的地的一种方式,FJ的每个农场,由n块土地(编号为1-n),M 条路,和W ...
- POJ 3259 Wormholes 邻接表的SPFA判断负权回路
http://poj.org/problem?id=3259 题目大意: 一个农民有农场,上面有一些虫洞和路,走虫洞可以回到 T秒前,而路就和平常的一样啦,需要花费时间走过.问该农民可不可能从某个点出 ...
- poj 3259 Wormholes 【SPFA&&推断负环】
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36852 Accepted: 13502 Descr ...
- poj 3259 Wormholes 判断负权值回路
Wormholes Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java ...
- ACM: POJ 3259 Wormholes - SPFA负环判定
POJ 3259 Wormholes Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu ...
- 最短路(Bellman_Ford) POJ 3259 Wormholes
题目传送门 /* 题意:一张有双方向连通和单方向连通的图,单方向的是负权值,问是否能回到过去(权值和为负) Bellman_Ford:循环n-1次松弛操作,再判断是否存在负权回路(因为如果有会一直减下 ...
- POJ 3259 Wormholes(最短路径,求负环)
POJ 3259 Wormholes(最短路径,求负环) Description While exploring his many farms, Farmer John has discovered ...
- POJ 3259 Wormholes(最短路,判断有没有负环回路)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24249 Accepted: 8652 Descri ...
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,推断是否存在负权回路)
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 29971 Accepted: 10844 Descr ...
随机推荐
- DevExpress控件使用系列--ASPxTreeList
控件功能 结合列表控件及树控件的优点,在列表控件中实现类型树的多层级操作 官方说明 http://documentation.devexpress.com/#AspNet/clsDevExpres ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- nenu contest2
http://vjudge.net/vjudge/contest/view.action?cid=54562#overview H B. Polygons http://codeforces.com ...
- 解决java写入xml报错org.w3c.dom.DOMException:DOM002 Illeg
Exception is -- > org.w3c.dom.DOMException: DOM002 Illegal character 字符不被允许 org.w3c.dom.DOMExcept ...
- 【锋利的JQuery-学习笔记】切换网页皮肤-且保存于Cookie
切换网页皮肤: html片段: <head> <link rel="stylesheet" href="styles/skin/skin_0.css&q ...
- $('li','div') $('div li') $('div li')
$('div','li')是$(子,父),是从父节点里找子,而不是找li外面的div $('div , li')才是找所有的div和li,之间不存在父子关系 $('div li') 是找div里面所有 ...
- POJ 1702
#include <iostream> #include <cmath> #define MAXN 100 using namespace std; void fun(int ...
- APT工作原理
两篇好的文章:http://blog.csdn.net/newjueqi/article/details/6679857 http://blog.csdn.net/buguyiqie/article/ ...
- sql语句面试总结
1.用一条SQL语句 查询出每门课都大于80分的学生姓名 name kecheng fenshu 张三 语文 81张三 数学 75李四 语文 ...
- Android:Android SDK Manager顺利下载
默认的Android SDK只有Android 4.4的版本,如果需要其他版本的模拟器,需要Android SDK Manager下载, 1.打开Eclipse 2.选择Android SDK Man ...