演算法提高 道路和航路

2021-07-28 13:18:36 字數 2305 閱讀 3417

演算法提高 道路和航路

時間限制:1.0s 記憶體限制:256.0mb

提交此題 錦囊1 錦囊2

問題描述

農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮(標號為1..t),這些城鎮通過r條標號為(1..r)的道路和p條標號為(1..p)的航路相連。

每一條公路i或者航路i表示成連線城鎮ai(1<=a_i<=t)和bi(1<=bi<=t)代價為ci。每一條公路,ci的範圍為0<=ci<=10,000;由於奇怪的運營策略,每一條航路的ci可能為負的,也就是-10,000<=ci<=10,000。

每一條公路都是雙向的,正向和反向的花費是一樣的,都是非負的。

每一條航路都根據輸入的ai和bi進行從ai->bi的單向通行。實際上,如果現在有一條航路是從ai到bi的話,那麼意味著肯定沒有通行方案從bi回到ai。

農夫約翰想把他那優良的牛奶從配送中心送到各個城鎮,當然希望代價越小越好,你可以幫助他嘛?配送中心位於城鎮s中(1<=s<=t)。

輸入格式

輸入的第一行包含四個用空格隔開的整數t,r,p,s。

接下來r行,描述公路資訊,每行包含三個整數,分別表示ai,bi和ci。

接下來p行,描述航路資訊,每行包含三個整數,分別表示ai,bi和ci。

輸出格式

輸出t行,分別表示從城鎮s到每個城市的最小花費,如果到不了的話輸出no path。

樣例輸入

6 3 3 4

1 2 5

3 4 5

5 6 10

3 5 -100

4 6 -100

1 3 -10

樣例輸出

no path

no path

5 0

-95

-100

資料規模與約定

對於20%的資料,t<=100,r<=500,p<=500;

對於30%的資料,r<=1000,r<=10000,p<=3000;

對於100%的資料,1<=t<=25000,1<=r<=50000,1<=p<=50000。

使用順序容器的deque進行spfa,在隊首和隊尾分別插入,取路徑,,鄰接表作圖

這道題給的測試事例很簡單,在送牛奶的途中,能向兩個不同的方向嘗試行走,那麼也就是需要用到鄰接表建圖,有權值方向就賦值,沒權值方向權值為無限大,也就是inf,使得表結點首尾相連有方向,

然後就是spfa,將需要儲存的點權值放在dis陣列中,每一次選擇權值小的方向行走,在容器deque中,每次取到較小的方向值,則從隊尾加入佇列,否則從隊首加入佇列,這樣最後得出的dis則是最小路徑了

藍橋網–得分95

學習源於:

感謝感謝!!

演算法提高 道路和航路

演算法提高 道路和航路 演算法提高 道路和航路 時間限制 1.0s 記憶體限制 256.0mb 問題描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1.p 的航路相連。每一條公路i或者航路i表示成連線...

演算法提高 道路和航路

演算法提高 道路和航路 時間限制 1.0s 記憶體限制 256 0mb 提交此題 錦囊1 錦囊2 問題描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1 p 的航路相連。每一條公路i或者航路i表示成連...

道路和航路

演算法提高 道路和航路 時間限制 1.0s 記憶體限制 256.0mb 問題描述 農夫約翰正在針對乙個新區域的牛奶配送合同進行研究。他打算分發牛奶到t個城鎮 標號為1.t 這些城鎮通過r條標號為 1.r 的道路和p條標號為 1.p 的航路相連。每一條公路i或者航路i表示成連線城鎮ai 1 a i t...