SPFA模板

 今天去听2015ZJOI浙江省队第二试的集训,早上就是听得云里雾里的ORZ,下午某两集训队大神过来将题目,第一个进了IOI的我只听懂了10%ORZ,第二个人机交互很好玩,找个时间单独写下。

   顺便附带膜拜各位聚聚,保我明天ZJOI不爆0........

   ORZZLD ORZYSY ORZWYH ORZCJH ORZZZQ

好了切入正题——

============================华丽的分割线=====================

今天我们来打打SPFA模板。

去年NOIP我SPFA之前突击了下然后day2果然我就用spfa坑了T2 60分,简直了,然而T1写跪了,其实没啥区别。然后我就发现SPFA挺重要的,这几天重新捡起来看看。

先(发)上代码再说

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAX=10000;
 4 struct node {
 5     int to,w,next;
 6 }edge[MAX];
 7 bool used[MAX];
 8 int outqueue[MAX],head[MAX],low[MAX],n,m;
 9 bool spfa(int start) {
10     queue<int> q;
11     used[start]=1;
12     low[start]=0;
13     q.push(start);
14     while(!q.empty()) {
15         int top=q.front();
16         q.pop();used[top]=0;
17         outqueue[top]++;
18         if(outqueue[top]>n) return 0;
19         for (int k=head[top];k!=-1;k=edge[k].next)
20             if(low[edge[k].to]>low[top]+edge[k].w) {
21                 low[edge[k].to]=low[top]+edge[k].w;
22                 if(!used[edge[k].to]) {
23                     used[edge[k].to]=1;
24                     q.push(edge[k].to);
25                 }
26             }
27     }
28     return 1;
29 }
30 int main() {
31     memset(used,0,sizeof(used));
32     memset(head,-1,sizeof(head));
33     memset(outqueue,0,sizeof(outqueue));
34     memset(low,2100000,sizeof(low));
35     scanf("%d%d",&n,&m);
36     for (int i=1,k=0; i<=m; ++i) {
37         int from,to,wei;
38         scanf("%d%d%d",&from,&to,&wei);
39         edge[k].to=to;
40         edge[k].w=wei;
41         edge[k].next=head[from];
42         head[from]=k++;
43     }
44     if(spfa(1)) printf("%d\n",low[n]);
45     else printf("存在负权环!\n");
46     return 0;
47 }
View Code

 

===========================================================

P.S:2015/5/22修改:原来的那份网络上的模板用完并没有将used清零,导致了一些小错误。

今天在动车(高铁)上好好理解了下SPFA,弄明白了:

next数组存的是和当前边一个起点的下/上一条边。

head[i]存的是以i为起点有多少条边。

w就不用讲了,边的权值。

SPFA的复杂度为O(kE),k是常数,所以经常被fzyz的orz神牛们使用。

===========================================================

其实SPFA也不难,就那样,有点小坑

我是开了个结构体,个人不太喜欢(习惯)写指针,以前写指针跪了好多,果然指针没学好。。。

我都不用指针的,除非万不得已,然而万不得已没有出现过。

——wyh大聚聚

我都喜欢用指针,因为“->”看起来很有美感。。

——cjh大聚聚

好吧话题跑歪了,下面列出可以参考的列表

http://blog.csdn.net/chenjiang492943457/article/details/5375413

http://www.cnblogs.com/devtang/archive/2011/08/25/spfa.html

http://baike.baidu.com/link?url=O0QvxbOY8SVBjrIl6nF6EvMHSslgcEIxfXSoty5SbkA7QjbWZjTWARzwTQsKKbSD5mlASljndZrqYjle_qwcmq

然而我发现SPFA还有优化!!!

LLL和SLF,改天去看看,然后再写个模板

 

最后声明下我并不是ZJ的 = =|||

转载于:https://www.cnblogs.com/TonyNeal/p/SPFAtem.html

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

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

相关文章

LCM在Kernel中的代码分析

lcm的分析首先是mtkfb.c 1.mtk_init中platform_driver_register(&mtkfb_driver)注册平台驱动 panelmaster_init(); DBG_init(); mtkfb_ipo_init(); 2.mtkfb_probe进行普配 3.然后执行primary_display_init(mtkfb_find_lcm_driver(),lcd_fps); 4.mtkfb_find_lcm_driver()进行…

html ascii编码方式,HTML 字符集 参考手册

要正确显示一个 HTML 页面&#xff0c;浏览器必须知道要使用的字符集(字符编码)。HTML 字符集在 HTML 中&#xff0c;正确的字符编码是什么&#xff1f;HTML5 中默认的字符编码是 UTF-8。这并非总是如此。早期网络的字符编码是 ASCII 码。后来&#xff0c;从 HTML 2.0 到 HTML …

JavaScript 中的闭包和作用域链(读书笔记)

要想理解闭包&#xff0c;应当先理解JavaScript的作用域和作用域链。 JavaScript有一个特性被称之为“声明提前&#xff08;hoisting&#xff09;”&#xff0c;即JavaScript函数里声明的所有变量&#xff08;但不涉及赋值&#xff09;都被“提前”至函数体的顶部&#xff0c;“…

leetcode jump game ii

题目&#xff1a; Given an array of non-negative integers, you are initially positioned at the first index of the array. Each element in the array represents your maximum jump length at that position. Your goal is to reach the last index in the minimum numb…

韩师师范学院计算机科学与技术在哪个学区,2017年韩山师范学院本科插班生考试《数据结构》A卷...

韩山师范学院2017年本科插班生考试试卷计算机科学与技术 专业 数据结构 试卷(A 卷)一、单项选择题(每题2分&#xff0c;共30分)1. 对线性表&#xff0c;在下列哪种情况下应当采用链表表示&#xff1f;( ) A. 经常需要随机地存取元素 B. 经常需要进行插入和删除操作 C. 表中元素…

JAVA取随机数,石头剪刀布实例

一、取随机数&#xff1a; import java.util.Random; //导入随机数 public class Test{public static void main(String[] args){Random xx new Random(); //声明随机数int number xx.nextInt(10); //赋值随机数给numberSystem.out.println("随机数…

计算机网络犯罪和一般犯罪的不同,论计算机网络犯罪题稿.doc

目 录摘要2第一章、网络犯罪概念、特点以及构成特征5(一)网络犯罪的概念认定5(二)网络犯罪的特点6(三)网络犯罪的构成7第二章、?网络犯罪的类型9(一)网络色情和性骚扰9(二)欺诈9(三)贩卖、销售违禁物品11(四)妨害名誉、侵犯个人隐私12(五)?制造、传播计算机病毒12第三章、?网…

实例变量和静态变量(或类变量static)

一个类通过使用运算符new可以创建多个不同的对象&#xff0c;这些对象将被分配不同的内存空间&#xff0c;准确的说法是&#xff1a;不同对象的实例变量将被分配不同的内存空间&#xff0c;如果类中有类变量&#xff0c;那么所有对象的这个类变量都被分配到同一处内存&#xff…

DB2 数据库清表语句

truncate table DWDM2.tablename IMMEDIATE; alter table DWDM1.tablename activate not logged initially with empty table&#xff1b; but which one is best ? the truncate should be better 转载于:https://www.cnblogs.com/TendToBigData/p/10501485.html

cnblogs_504 Gateway Time-out

地址&#xff1a;http://zzk.cnblogs.com/s?tb&w%E6%B1%82%E8%81%8C 504 Gateway Time-out 504 Gateway Time-out The gateway did not receive a timely response from the upstream server or application. Sorry for the inconvenience. Please report this message an…

第一阶段

初步实现了相机的调用&#xff0c;做了简单界面&#xff0c;并没有实现核心功能 Button button (Button) findViewById(R.id.sao);button.setOnClickListener(new OnClickListener(){Overridepublic void onClick(View v) {Intent intent new Intent(MediaStore.ACTION_IMAGE…

JavaScript 详说事件机制之冒泡、捕获、传播、委托

DOM事件流&#xff08;event flow &#xff09;存在三个阶段&#xff1a;事件捕获阶段、处于目标阶段、事件冒泡阶段。 事件捕获&#xff08;event capturing&#xff09;&#xff1a;通俗的理解就是&#xff0c;当鼠标点击或者触发dom事件时&#xff0c;浏览器会从根节点开始…

很棒的HTML5效果实例

2019独角兽企业重金招聘Python工程师标准>>> http://mrdoob.com/141/Internet_Explorer_with_WebGL 转载于:https://my.oschina.net/u/3647620/blog/1552495

计算机一级网络操作题没点回答,计算机等级一级考试操作题1(附答案)

一、选择题1、在计算机领域中通常用mips来描述______。a、计算机的运算速度 b、计算机的可靠性 c、计算机的可运行性 d、计算机的可扩充性2、微型计算机存储系统中&#xff0c;prom是______。a、可读写存储器 b、动态随机存取存储器 c、只读存储器 d、可编程只读存储器3、按161…

模拟 Codeforces Round #297 (Div. 2) A. Vitaliy and Pie

题目传送门 1 /*2 模拟&#xff1a;这就是一道模拟水题&#xff0c;看到标签是贪心&#xff0c;还以为错了呢3 题目倒是很长:)4 */5 #include <cstdio>6 #include <algorithm>7 #include <iostream>8 #include <algorithm>9 #include <cstr…

Socket 之 API函数介绍

1、创建套接字──socket() 应用程序在使用套接字前&#xff0c;首先必须拥有一个套接字&#xff0c;系统调用socket()向应用程序提供创建套接字的手段&#xff0c;其调用格式如下&#xff1a; SOCKET PASCAL FAR socket(int af, int type, int protocol); 该调用要接收三个参…

分配的访问权限的展台应用:最佳做法

原文: 分配的访问权限的展台应用&#xff1a;最佳做法 best practices guidance for developing a kiosk app for assigned access. 在 Windows 10 中&#xff0c;你可以使用锁屏框架和分配的访问权限创建展台应用&#xff0c;该应用允许用户与设备上的单个应用进行交互。 本文…

计算机工程 目录 2014年第1期 pdf,2013科技核心期刊目录有效期至2014年).pdf

2013科技核心期刊目录有效期至2014年).pdf中国科技核心期刊(中国科技论文统计源期刊)2013CODE 期刊名称2013 年新入选F034 ACTA BIOCHIMICA ET BIOPHYSICA SINICAC096 ACTA MATHEMATICA SCIENTIAB030 ACTA MATHEMATICA SINICA ENGLISH SERIESI051 ACTA MATHEMATICAE APPLICATAE…

SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的解决方案...

今天写了一个excel表的导入功能&#xff0c;结果在excel表中的内容导入到页面时报错&#xff1a;SQL Server 阻止了对组件 Ad Hoc Distributed Queries 的 STATEMENTOpenRowset/OpenDatasource 的访问&#xff0c;因为此组件已作为此服务器安全配置的一部分而被关闭。系统管…

Mongo客户端MongoVUE的基本使用

这里没有涉及到服务器以及客户端的安装&#xff0c;文章主要介绍mongo客户端mongoVUE的使用 一、数据库连接 点击绿色加号添加一个连接&#xff0c;输入name、server、port&#xff0c;点击save&#xff0c;点击connect进行连接 二、添加 1.右键添加一个Database 2.输入名称&am…