[蓝桥杯]算法提高 道路和航路(spfa+deque+快读优化)
問題描述
農(nóng)夫約翰正在針對一個(gè)新區(qū)域的牛奶配送合同進(jìn)行研究。他打算分發(fā)牛奶到T個(gè)城鎮(zhèn)(標(biāo)號為1…T),這些城鎮(zhèn)通過R條標(biāo)號為(1…R)的道路和P條標(biāo)號為(1…P)的航路相連。
每一條公路i或者航路i表示成連接城鎮(zhèn)Ai(1<=A_i<=T)和Bi(1<=Bi<=T)代價(jià)為Ci。每一條公路,Ci的范圍為0<=Ci<=10,000;由于奇怪的運(yùn)營策略,每一條航路的Ci可能為負(fù)的,也就是-10,000<=Ci<=10,000。
每一條公路都是雙向的,正向和反向的花費(fèi)是一樣的,都是非負(fù)的。
每一條航路都根據(jù)輸入的Ai和Bi進(jìn)行從Ai->Bi的單向通行。實(shí)際上,如果現(xiàn)在有一條航路是從Ai到Bi的話,那么意味著肯定沒有通行方案從Bi回到Ai。
農(nóng)夫約翰想把他那優(yōu)良的牛奶從配送中心送到各個(gè)城鎮(zhèn),當(dāng)然希望代價(jià)越小越好,你可以幫助他嘛?配送中心位于城鎮(zhèn)S中(1<=S<=T)。
輸入格式
輸入的第一行包含四個(gè)用空格隔開的整數(shù)T,R,P,S。
接下來R行,描述公路信息,每行包含三個(gè)整數(shù),分別表示Ai,Bi和Ci。
接下來P行,描述航路信息,每行包含三個(gè)整數(shù),分別表示Ai,Bi和Ci。
輸出格式
輸出T行,分別表示從城鎮(zhèn)S到每個(gè)城市的最小花費(fèi),如果到不了的話輸出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
數(shù)據(jù)規(guī)模與約定
對于20%的數(shù)據(jù),T<=100,R<=500,P<=500;
對于30%的數(shù)據(jù),R<=1000,R<=10000,P<=3000;
對于100%的數(shù)據(jù),1<=T<=25000,1<=R<=50000,1<=P<=50000。
思路:
這本來是最短路的一道模板題,但是太扯淡了,弄了很久。
坑點(diǎn):
①有負(fù)數(shù)邊,得用spfa。
②邊數(shù)特別大,所以得優(yōu)化一下,我用的deque+快讀優(yōu)化。
③空間不要開小了,開小了會超時(shí)。。
但是就算是這樣,在dotcpp網(wǎng)站上還是沒有過去,得分95。在藍(lán)橋杯官網(wǎng)的網(wǎng)站上以421ms過的。
代碼如下:
(本來想用deque+LLL優(yōu)化一下呢,結(jié)果優(yōu)化還不如不優(yōu)化。??赡躄LL不適合這道題目吧。)
努力加油a啊,(o)/~
總結(jié)
以上是生活随笔為你收集整理的[蓝桥杯]算法提高 道路和航路(spfa+deque+快读优化)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3Dmax如何导入Rhino模型并渲染
- 下一篇: [蓝桥杯]算法提高 天天向上(记忆化搜索