/**
problem: http://poj.org/problem?id=3259
spfa判负环:
当有个点被松弛了n次,则这个点必定为负环中的一个点(n为点的个数)
spfa双端队列优化:
维护队列使其dist小的点优先处理
**/
#include<stdio.h>
#include<deque>
#include<algorithm>
using namespace std; class Graphics{
const static int MAXN = ;
const static int MAXM = * + ;
const static int INF = 0x7fffffff;
private:
struct Edge{
int to, dist, next;
}edge[MAXM];
int first[MAXN], sign, sumOfPoint;
public:
void init(int n){
sumOfPoint = n;
for(int i = ; i <= n; i ++){
first[i] = -;
}
sign = ;
}
void addEdgeOneWay(int u, int v, int w){
edge[sign].dist = w;
edge[sign].to = v;
edge[sign].next = first[u];
first[u] = sign ++;
}
void addEdgeTwoWay(int u, int v, int w){
addEdgeOneWay(u, v, w);
addEdgeOneWay(v, u, w);
}
bool spfaNegRing(int start){
bool *vis = new bool[sumOfPoint+];
int *dist = new int[sumOfPoint+];
int *cnt = new int[sumOfPoint+];
for(int i = ; i <= sumOfPoint; i ++){
vis[i] = ;
cnt[i] = ;
dist[i] = INF;
}
deque<int> que;
que.push_front(start);
dist[start] = ;
vis[start] = ;
while(!que.empty()){
int now = que.front();
que.pop_front();
vis[now] = ;
for(int i = first[now]; i != -; i = edge[i].next){
int to = edge[i].to, eDist = edge[i].dist;
if(dist[now] + eDist < dist[to]){
dist[to] = dist[now] + eDist;
cnt[to] ++;
if(cnt[to] >= sumOfPoint) { /// 如果这个点已经松弛n次则它必定是负环中的一个点
delete []vis; delete []dist; return true;
}
if(!vis[to]){
vis[to] = ;
if(que.empty() || dist[to] <= dist[que.front()])
que.push_front(to);
else
que.push_back(to);
}
}
}
}
delete []vis; delete []dist; return false;
}
}graph; int main(){
int f;
scanf("%d", &f);
while(f --){
int n, m, w;
scanf("%d%d%d", &n, &m, &w);
graph.init(n);
while(m --){
int s, e, t;
scanf("%d%d%d", &s, &e, &t);
graph.addEdgeTwoWay(s, e, t);
}
while(w --){
int s, e, t;
scanf("%d%d%d", &s, &e, &t);
graph.addEdgeOneWay(s, e, -t);
}
printf("%s\n", graph.spfaNegRing() ? "YES" : "NO");
}
return ;
}

poj 3259 Wormholes : spfa 双端队列优化 判负环 O(k*E)的更多相关文章

  1. POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)

    题意:John的农场里field块地,path条路连接两块地,hole个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts.我们的任务是知道会不会在从某块地出发后又回来,看到了离开之前 ...

  2. 关于SPFA的双端队列优化

    7.11 Update 我做题的时候发现这样写会RE 因为在使用双端队列优化SPFA的时候 在将一个点加入队列的时候,如果队列已经空了 那么一旦出现dis[Q.front()]就会RE 可以这样修改 ...

  3. Vijos1834 NOI2005 瑰丽华尔兹 动态规划 单调双端队列优化

    设dp[t][x][y]表示处理完前t个时间段,钢琴停留在(x,y)处,最多可以走多少个格子 转移时只需逆着当前倾斜的方向统计len个格子(len为时间区间的长度,len=t-s+1),如果遇到障碍就 ...

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

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

  5. POJ 3259 Wormholes(SPFA判负环)

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

  6. POJ 3259 Wormholes SPFA算法题解

    版权声明:本文作者靖心,靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载. https://blog.csdn.net/kenden23/article ...

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

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

  8. poj 3259 Wormholes spfa算法

    点击打开链接 Wormholes Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25582   Accepted: 9186 ...

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

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

随机推荐

  1. PHP 文件锁和常用文件函数

    文件锁 bool flock ( int handle, int operation [, int &wouldblock] );flock() 操作的 handle 必须是一个已经打开的文件 ...

  2. 1.HTML小结

    HTML 基本文档 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  3. 【Android】9.0活动的生命周期(二)——实际代码演示

    1.0  新建一个项目ActivityLifeCycleTest. 新建两个活动NormalActivity和DialogActivity,勾选“Generate Layout File”. 文件目录 ...

  4. css随堂笔记(三)

    Css随堂笔记(三) 1 关于背景图片   A 设置背景图片:background-image:url(“图片的路径”):   B 背景图片位置: background-position:1 方位名词 ...

  5. numpy中一些常用函数的用法总结

    先简单记录一下,后续补充详细的例子   1. strip()函数 s.strip(rm):s为字符串,rm为要删除的字符序列 只能删除开头或是结尾的字符或者字符串.不能删除中间的字符或是字符串 当rm ...

  6. js如何设置一个倒计时

    //申明一个定时器 let endInterval; //结束时间(毫秒数,这里是距离 1970 年 1 月 1 日至今的毫秒数) let endSeconds; //结束时间差 const ENDT ...

  7. 日期函数new Date()浏览器兼容性问题

    项目上与时间相关的地方特别多,与时间格式相关都使用了moment.js轻量级日期处理库,在开发中出现了几次浏览器兼容性问题,所以总结一下new Date()和moment.js在各大浏览器中兼容性问题 ...

  8. 在windows环境下运行compass文件出现的错误提示解决方案

    在windows环境下运行compass文件出现的错误提示解决方案 例如:经常在项目中运行grunt命令编译scss文件的时候,会出现下面的错误提示 (Encoding::CompatibilityE ...

  9. 爬虫入门之jsonPath PhantomJS与 selenium详解(六)

    1 jsonPath数据格式 pip安装: pip install jsonpath 用来解析json格式的字符串,类似于xpath (1) json对象的转换 json.loads() json.d ...

  10. March 6 2017 Week 10 Monday

    A well-spent day brings happy sleep. 丰盈白日,安眠晚间. Recently my sleep is not so good, for one thing I go ...