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.pswp.cn/news/257267.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257267.shtml
英文地址,請注明出處:http://en.pswp.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…