poj 3259 Wormholes : spfa 双端队列优化 判负环 O(k*E)

 1 /**
 2 problem: http://poj.org/problem?id=3259
 3 spfa判负环:
 4 当有个点被松弛了n次,则这个点必定为负环中的一个点(n为点的个数)
 5 spfa双端队列优化:
 6 维护队列使其dist小的点优先处理
 7 **/
 8 #include<stdio.h>
 9 #include<deque>
10 #include<algorithm>
11 using namespace std;
12 
13 class Graphics{
14 const static int MAXN = 505;
15 const static int MAXM = 2505 * 2 + 205;
16 const static int INF = 0x7fffffff;
17 private:
18     struct Edge{
19         int to, dist, next;
20     }edge[MAXM];
21     int first[MAXN], sign, sumOfPoint;
22 public:
23     void init(int n){
24         sumOfPoint = n;
25         for(int i = 1; i <= n; i ++){
26             first[i] = -1;
27         }
28         sign = 0;
29     }
30     void addEdgeOneWay(int u, int v, int w){
31         edge[sign].dist = w;
32         edge[sign].to = v;
33         edge[sign].next = first[u];
34         first[u] = sign ++;
35     }
36     void addEdgeTwoWay(int u, int v, int w){
37         addEdgeOneWay(u, v, w);
38         addEdgeOneWay(v, u, w);
39     }
40     bool spfaNegRing(int start){
41         bool *vis = new bool[sumOfPoint+1];
42         int *dist = new int[sumOfPoint+1];
43         int *cnt = new int[sumOfPoint+1];
44         for(int i = 1; i <= sumOfPoint; i ++){
45             vis[i] = 0;
46             cnt[i] = 0;
47             dist[i] = INF;
48         }
49         deque<int> que;
50         que.push_front(start);
51         dist[start] = 0;
52         vis[start] = 1;
53         while(!que.empty()){
54             int now = que.front();
55             que.pop_front();
56             vis[now] = 0;
57             for(int i = first[now]; i != -1; i = edge[i].next){
58                 int to = edge[i].to, eDist = edge[i].dist;
59                 if(dist[now] + eDist < dist[to]){
60                     dist[to] = dist[now] + eDist;
61                     cnt[to] ++;
62                     if(cnt[to] >= sumOfPoint) { /// 如果这个点已经松弛n次则它必定是负环中的一个点
63                         delete []vis; delete []dist; return true;
64                     }
65                     if(!vis[to]){
66                         vis[to] = 1;
67                         if(que.empty() || dist[to] <= dist[que.front()])
68                             que.push_front(to);
69                         else
70                             que.push_back(to);
71                     }
72                 }
73             }
74         }
75         delete []vis; delete []dist; return false;
76     }
77 }graph;
78 
79 int main(){
80     int f;
81     scanf("%d", &f);
82     while(f --){
83         int n, m, w;
84         scanf("%d%d%d", &n, &m, &w);
85         graph.init(n);
86         while(m --){
87             int s, e, t;
88             scanf("%d%d%d", &s, &e, &t);
89             graph.addEdgeTwoWay(s, e, t);
90         }
91         while(w --){
92             int s, e, t;
93             scanf("%d%d%d", &s, &e, &t);
94             graph.addEdgeOneWay(s, e, -t);
95         }
96         printf("%s\n", graph.spfaNegRing(1) ? "YES" : "NO");
97     }
98     return 0;
99 }

 

转载于:https://www.cnblogs.com/DarkScoCu/p/10527359.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编写干净的测试–用特定领域的语言替换断言

很难为干净的代码找到一个好的定义&#xff0c;因为我们每个人都有自己的单词clean的定义。 但是&#xff0c;有一个似乎是通用的定义&#xff1a; 干净的代码易于阅读。 这可能会让您感到有些惊讶&#xff0c;但是我认为该定义也适用于测试代码。 使测试尽可能具有可读性是我…

如何让MFC程序关闭按钮失效,也无法右击任务栏关闭窗口来关闭?

如何让MFC程序关闭按钮失效&#xff0c;也无法右击任务栏关闭窗口来关闭&#xff0c;即右键任务栏的关闭窗口失效呢&#xff1f;很简单&#xff0c;有一个小窍门就是&#xff1a;响应IDCANCEL消息&#xff0c;具体实现如下&#xff1a; 首先定义消息映射&#xff1a;ON_BN_CLIC…

令人眼睛一亮的履历表

令人眼睛一亮的履历表 你辛辛苦苦写的一份简历&#xff0c;可在人事经理眼里最多只是停留几十秒的时间。如果时机拿捏不好&#xff0c;它会给你造成麻烦&#xff1a;它可能暴露你的短处&#xff0c;而且基本目的都是供人淘汰之用。然而&#xff0c;当你必须做出履历表时&#…

angularjs封装bootstrap官网的时间插件datetimepicker

背景:angular与jquery类库的协作 第三方类库中&#xff0c;不得不提的是大名鼎鼎的jquery,现在基本上已经是国内web开发的必修工具了。它灵活的dom操作&#xff0c;让很多web开发人员欲罢不能。再加上已经很成熟的jquery UI 库和大量jquery 插件&#xff0c;几乎是一个取之不尽…

Java中的得墨meter耳定律–最少知识原理–实际示例

得墨meter耳定律&#xff08;也称为最少知识定律&#xff09;是一种编码原理&#xff0c;它表示模块不应该知道其操作的对象的内部细节。 如果代码依赖于特定对象的内部细节&#xff0c;则很有可能一旦该对象的内部发生更改&#xff0c;它就会被破坏。 由于封装是关于隐藏对象的…

课后作业1

自我介绍 我叫张阔&#xff0c;我的爱好是旅行&#xff0c;游览世界的美好风光&#xff1b; 我的码云个人主页是&#xff1a;https://gitee.com/ZkTt0428&#xff1b; 我的第一个项目地址是&#xff1a;https://gitee.com/ZkTt0428/Frist&#xff1b; 目前代码量有10000行了&am…

记录6月28日的体验,自己现实的感触

2016年6月28日&#xff0c;是我自己要求的要去湖北的日子&#xff0c;可是现在&#xff0c;这个只能成为过去式&#xff0c;只能是提一提&#xff01; 2016年5月17日&#xff0c;我在想&#xff0c;我要通宵加班&#xff0c;做好自己最好&#xff0c;最期待完成的3.0&#xff0…

lucene索引

1。lucene的索引尽量不要频繁而小量的编制&#xff0c;比如&#xff1a;用户每发一个贴子&#xff0c;就加入索引&#xff0c;那样对索引的结构和效率不利。 可以采用定时或者定量&#xff0c;批量处理索引的方式。 2。在批量处理的基础上&#xff0c;解决冲突的问题的方案之一…

针对新手的Java EE7和Maven项目-第4部分-定义Ear模块

从前面的部分恢复 第1部分 第2部分 第3部分 我们正在恢复第四部分&#xff0c;目前我们的简单项目有 Web Maven模块&#xff08;战争&#xff09; 一个ejb模块&#xff08;ejb&#xff09;&#xff0c;其中包含我们的无状态会话bean&#xff08;EJB 3.1&#xff09; 第二…

合并两个有序数组,并输出中间值

示例1&#xff1a; nums1 [1,3] nums2 [2,4] output: (23) / 2 2.5 示例2&#xff1a; nums1 [2,5,7] nums2 [3,6] output:5 Python解决方案&#xff1a; def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]:type nums2: List[int…

Python中关于文件路径的简单操作 [转]

1: os.listdir(path) #path为目录 功能相当于在path目录下执行dir命令&#xff0c;返回为list类型 举例&#xff1a; print os.listdir(..) 输出&#xff1a; [a,b,c,d] 2: os.path.walk(path,visit,arg) path &#xff1a;是将要遍历的目录 visit &#xff1…

生产上完成TopN统计流程

背景 现有城市信息和产品信息两张表在MySQL中&#xff0c;另外有用户点击产品日志以文本形式存在hdfs上&#xff0c;现要求统计每个个城市区域下点击量前三的产品名&#xff0c;具体信息见下方。 mysql> show tables; --------------------------------- | Tables_in_d7 …

最大公因数和最小公倍数

一丶 最大公因数求法&#xff1a;辗转相除法(也称欧几里得算法)原理: 二丶最小公倍数求法&#xff1a;两个整数的最小公倍数等于两整数之积除以最大公约数1 #include <iostream>2 3 using namespace std;4 5 //辗转相除法(欧几里得算法)6 7 int gcd(int a, int b)8 {9…

css实现div内一段文本的两端对齐

在一个固定宽度的div内&#xff0c;使得P标签内的文本两端对齐&#xff1a; text-align: justify;text-justify:inter-ideograph; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>justify</title>…

JPA 2.1实体图–第2部分:在运行时定义延迟/急切加载

这是我关于JPA 2.1实体图的第二篇文章。 第一篇文章描述了命名实体图的用法。 这些可用于定义在编译时将使用查找或查询方法获取的实体和/或属性的图形。 动态实体图以相同的方式但以动态方式这样做。 这意味着您可以在运行时使用EntityGraph API定义实体图。 如果您错过了第一…

HDU1166-敌兵布阵

http://acm.hdu.edu.cn/showproblem.php?pid1166 线段树第一题 #include<cstdio> #define lson l,m,rt<<1 #define rson m1,r,rt<<1|1 const int maxn55555; int sum[maxn<<2]; void PushUP(int rt) {sum[rt]sum[rt<<1]sum[rt<<1|1]; } …

js对象序列化为json字符串

网上找了找将js对象序列化为json字符串的方法。结果都不近人意&#xff0c;最后自己写了一个。 注意你得自己为Date增加toString()方法。 function Serialize(obj){switch(obj.constructor){case Object:var str "{";for(var o in obj){str o ":" Seri…

QT学习三 标准对话框 QMessageBox

QMessageBox内置了几种static方法,例如 QMessageBox::question() 返回值:StandardButton 参数:QWidget * 父窗口&#xff0c;标题名&#xff0c;内容&#xff0c;按钮 YES|NO,默认选中按钮) 示例: 1 #include "mainwindow.h"2 #include <QApplication>3 #incl…

react学习笔记2

1.build文件介绍 &#xff08;1&#xff09;react.js 是react的核心库 &#xff08;2&#xff09;react-dom.js 提供与DOM相关功能 &#xff08;3&#xff09;browser.js 是将JSX语法转为javascript语法 2.组件的继续学习 注意&#xff1a;组件的第一个字母必须大写&…

Spring4:没有默认构造函数的基于CGLIB的代理类

在Spring中&#xff0c;如果要代理的目标对象的类未实现任何接口&#xff0c;则将创建基于CGLIB的代理。 在Spring 4之前&#xff0c;基于CGLIB的代理类需要默认的构造函数。 这不是CGLIB库的限制&#xff0c;而是Spring本身。 幸运的是&#xff0c;从Spring 4开始&#xff0c;…