/**
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. sass继承

    @extend sass中,选择器继承可以让选择器继承另一个选择器的所有样式,并联合声明.使用选择器的继承,要使用关键词@extend,后面紧跟需要继承的选择器. scss.style css.sty ...

  2. 原生js获取手机定位信息

    <script type="text/javascript"> function Location() {}; Location.prototype.getLocati ...

  3. SetupFactory7使用经验

    1.        exe默认产生快捷方式,可以点击去掉. 2.        默认英语,可与选汉语 3.        编码逻辑 安装程序复制完程序文件后,从编辑框中得到数据,并写ini文件 屏幕- ...

  4. dialog和dialogFragment的使用及常用问题

    今天比较懒,只是列举了一些网址 弹窗之一:dialogFragment的使用 https://blog.csdn.net/sinat_31057219/article/details/76979246 ...

  5. WebSettings 最全属性说明

    setAllowContentAccess (boolean allow) 是否允许在WebView中访问内容URL(Content Url),默认允许.内容Url访问允许WebView从安装在系统中 ...

  6. Selenium2学习(二)-- 操作浏览器基本方法

    前面已经把环境搭建好了,这从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是web ...

  7. adb工具包使用方法

    ADB工具包总共有四个文件,两个exe后缀,两个dll后缀.里面还带有fastboot.exe下载后在PC上安装,如安装到D:\adb_tools-2.0目录,确认目录中带有fastboot.exe文 ...

  8. WIN7系统程序放在中文文件夹打开报错及界面汉字变乱码

    今天发现在一个服务商提供的设备的WIN7系统里,一个稳定运行的程序打开时报错,且界面汉字变乱码. 经测试发现程序放在英文名称的文件夹中可以正常打开,但界面上的汉字仍为乱码. 后检查“控制面板“--”区 ...

  9. ZT C++关键字new学习

    http://blog.csdn.net/waken_ma/article/details/4007914 C++关键字new学习 很多新手对C++关键字new可能不是很了解吧,今天我一起来学习一下. ...

  10. NO.006-2018.02.11《卜算子·我住长江头》宋代:李之仪

    卜算子·我住长江头_古诗文网(bǔ) 卜算子·我住长江头 宋代:李之仪 我住长江头,君住长江尾.日日思君不见君,共饮长江水. 我居住在长江上游,你居住在长江下游. 天天想念你却见不到你,共同喝着长江的 ...