jzoj 2051. 【8.18】極其簡單的最短路問題
題目描述
小C終於被小X感動了,於是決定與他看電影,然而小X距離電影院非常遠,現在假設每條道路需要花費小X的時間為1,由於有數以萬計的好朋友沿路祝賀,導致小X在通過某些路不得不耗費1的時間來和他們聊天,儘管他希望儘早見到小C,所以他希望找到一條最快時間到達電影院的路。
一開始小X在1號點,共有N個點,M條路,電影院為T號點。
輸入
第一行3個正整數,分別為n,m,t
以下m行,每行3個數,表示連線的編號以及權值
(注意,可能會有重邊)
輸出
一行一個數,表示1到t的最短路
思路
spfa+優化
重點就在優化這了
用鄰接表儲存邊,可以在spfa時減少判斷次數
然後就可以飛起了
type
arr=record
x,y,w,next:longint;
end;
var
edge:array[0..10000000] of arr;
ls,t,state:array[0..10000000] of int64;
exits:array[0..1000000] of boolean;
i,j,k,n,m,q,p,o,s,l:longint;
procedure spfa;
var
head,tail,i,j:longint;
begin
state[1]:=0;
head:=0; tail:=1;
exits[1]:=true;
t[1]:=1;
repeat
inc(head);
i:=ls[t[head]];
while i<>0 do
begin
with edge[i] do
begin
if state[x]+w<state[y] then
begin
state[y]:=state[x]+w;
if exits[y]=false then
begin
inc(tail);
t[tail]:=y;
exits[y]:=true ;
end;
end;
i:=next;
end;
end;
exits[t[head]]:=false;
until head=tail;
end;
begin
assign(input,'short.in');
reset(input);
assign(output,'short.out');
rewrite(output);
fillchar(state,sizeof(state),63);
readln(n,m,l);
j:=1;
for i:=1 to m do
begin
readln(q,p,o);
edge[j].x:=q;
edge[j].y:=p;
edge[j].w:=o;
edge[j].next:=ls[edge[j].x];
ls[edge[j].x]:=j;
inc(j);
edge[j].x:=p;
edge[j].y:=q;
edge[j].w:=o;
edge[j].next:=ls[edge[j].x];
ls[edge[j].x]:=j;
inc(j);
end;
spfa;
writeln(state[l])
end.
相關推薦
jzoj 2051. 【8.18】極其簡單的最短路問題
題目描述 小C終於被小X感動了,於是決定與他看電影,然而小X距離電影院非常遠,現在假設每條道路需要花費小X的時間為1,由於有數以萬計的好朋友沿路祝賀,導致小X在通過某些路不得不耗費1的時間來和他們聊天,儘管他希望儘早見到小C,所以他希望找到一條最快時間到達電影
【演算法模板】Floyd求最短路
#include<iostream> using namespace std; const int MAXN=100+10; const int INF=99999999; int n,m,s,t,g[MAXN][MAXN]; int main() {
2018.11.05【校內模擬】規避(最短路計數)(容斥)(正難則反)
傳送門 解析: 首先直接統計並不好做,考慮反著做,先求出總共的方案數,然後減去相遇的方案數。 總方案數就是SSS到TTT的最短路數量的平方(兩人分別作選擇)。 首先這是個計數類問題,先做一個最短路計數。 令distSudistS_udistSu表示SSS到u
【POJ 2502】Subway(最短路dij)
Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of getting to ride your bike to
【線段樹】[BZOJ2104/WC2009]最短路問題
題目描述 分析 在一個長條狀的東西上維護資訊,我們可以想到使用線段樹。 對於一個對應範圍為[L,R]的節點,我們維護區間內最左邊的那一列的點的每一個點和最右邊一列的每一個點兩兩之間只經過[L,R]的點的最短路。 關於合併,可以檢視http://b
JZOJ 5773. 【NOIP2008模擬】簡單數學題
文章目錄題目:分析:程式碼: 題目: 傳送門 分析: 根據上面的式子,我們可以得出Nx+1\frac{N}{x}+1xN+1為偶數,因為111是奇數,而奇數+奇數才等於偶數,故Nx\frac{N
【微信授權】極其簡單的實現方法
強烈推薦使用一個工具包,在maven的中心倉庫中搜索"weixin-java"就可以搜尋到,感謝這位大佬的作品,大大簡化了微信端開發的難度。 接下來是一個簡單例子,是我在我的實際專案中抽取出來的一部分,專案使用的是springboot框架,但是無論使用什麼框架微信授權的步驟
HDU 5858 Hard problem(計算幾何)【較難】【多校聯合8.18】
解題思路: 看懂這個圖,這個題就能A掉了。 下面是AC程式碼: #include<cstdio> #include<cstring> #include<c
【機器學習】如何簡單形象又有趣地講解神經網絡是什麽?
二層 紐約大學 都是 不定 一個 移動 機器學習 mat weixin 【機器學習】如何簡單形象又有趣地講解神經網絡是什麽? https://mp.weixin.qq.com/s/jAcInAWI6cVvsnevoHIShQ 作者:王小龍 鏈接:www.zhihu.
【原始碼剖析】MemoryPool —— 簡單高效的記憶體池 allocator 實現
什麼是記憶體池?什麼是 C++ 的 allocator? 記憶體池簡單說,是為了減少頻繁使用 malloc/free new/delete 等系統呼叫而造成的效能損耗而設計的。當我們的程式需要頻繁地申請和釋放
國慶七天樂Day1 - 2015ICPC長春站 【8/13】
題目連結 A - Too Rich 有面值為1.5.10.20.50.100.200.500.1000.2000的鈔票若干張,要求用盡可能多數目的鈔票湊出p元。 考慮先求出給出的所有金額之和sum,那麼問題就等價於用盡可能少的鈔票湊出sum-p元。如果每一種面值都能整除較小的那
【遊戲開發】實現簡單對話方塊及音樂播放
//Windows視窗標頭檔案 #include <Windows.h> //PlaySound函式包含的標頭檔案 #pragma comment(lib,"winmm.lib") //主函式 int WINAPI WinMain(HINSTANCE hInstance,HINSTA
【Polo the Penguin and Strings】【CodeForces - 288A 】(簡單尋找規律)
題目: Little penguin Polo adores strings. But most of all he adores strings of length n. One day he wanted to find a string that meets the fo
JZOJ 5775. 【NOIP2008模擬】農夫約的假期
文章目錄題目:分析:程式碼: 題目: 傳送門 分析: 首先,關於這道題,有個很巧妙的ACACAC方法:在AJAJAJ沒出資料前,機智的提交,即可用returnreturnreturn 000成功AC
JZOJ P5793. 【NOIP2008模擬】小S練跑步
5793. 【NOIP2008模擬】小S練跑步 (File IO): input:run.in output:run.out Time Limits: 2000 ms Memory Limits:
【python Elasticsearch】python 簡單操作Elasticsearch
python提供了操作ElasticSearch 介面,因此要用python來操作ElasticSearch,首先要安裝python的ElasticSearch包 pip install elasticsearch 官網提供的python操作ES的簡單例子是
【12.18】工作總結
連線伺服器 使用Xshell5和Xftp5完成了伺服器的連線。 xshell是一種ssh客戶端,其他類似的客戶端還有pietty等,xftp5可以實現windows系統和linux系統之間的檔案傳輸。 伺服器的ip地址為:10.108.246.53 在Linux系統中安裝Python3
【視訊聊天】一個簡單demo
Android端程式:https://github.com/Zweo/VideoChat 系統架構示意圖 視訊聊天的的流程大致為: 1. 使用者A發起視訊聊天,將控制資訊發往排程伺服器,同時將A視訊流上傳流媒體伺服器; 2. 排程伺服器通過控
【Java.JMS】一個簡單的JMS例項
選擇ActiveMQ。 建立一個簡單的Maven工程,pom.xml如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-i
【程式18】 題目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一個數字。例如2 + 22 + 222 + 2222 + 22222(此時 共有5個數相加),幾個數
初試版本 存在的問題:陣列記憶體大小固定,無法動態改變 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> /* 【程式18】 題目:求s = a + aa + aaa + aaaa + aa...a的值,其中a是一個數字。例如