HDU-6290_奢侈的旅行(Dijstra+堆优化)
奢侈的旅行
Time Limit: 14000/7000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)
Problem Description
高玩小Q不僅喜歡玩尋寶游戲,還喜歡一款升級養成類游戲。在這個游戲的世界地圖中一共有n個城鎮,編號依次為1到n。
這些城鎮之間有m條單向道路,第i 條單項道路包含四個參數ui,vi,ai,bi,表示一條從ui號城鎮出發,在vi號城鎮結束的單向道路,因為是單向道路,這不意味著小Q可以從vi沿著該道路走到ui。小Q的初始等級level為1,每當試圖經過一條道路時,需要支付cost=log2level+ailevel點積分,并且經過該道路后,小Q的等級會提升ai級,到達level+ai級。但是每條道路都會在一定意義上歧視低消費玩家,準確地說,如果該次所需積分cost<bi,那么小Q不能經過該次道路,也不能提升相應的等級。
注意:本游戲中等級為正整數,但是積分可以是任意實數。
小Q位于1號城鎮,等級為1,現在為了做任務要到n號城鎮去。這將會是一次奢侈的旅行,請寫一個程序幫助小Q找到需要支付的總積分最少的一條路線,或判斷這是不可能的。
Input
第一行包含一個正整數T(1≤T≤30),表示測試數據的組數。
每組數據第一行包含兩個整數n,m(2≤n≤100000,1≤m≤200000),表示城鎮數和道路數。
接下來m行,每行四個整數ui,vi,ai,bi(1≤ui,vi≤n,ui≠vi,0≤ai≤109,0≤bi≤60),分別表示每條單向道路。
Output
對于每組數據,輸出一行一個整數,即最少所需的總積分的整數部分,如:4.9999輸出4,1.0輸出1。若不存在合法路線請輸出?1。
Sample Input
1
3 3
1 2 3 2
2 3 1 6
1 3 5 0
Sample Output
2
Source
"字節跳動杯"2018中國大學生程序設計競賽-女生專場
Recommend
liuyiding
題解:根據(loga + logb) = logab這一個公式可以得到消耗總積分為log2(1+Sn),盡量讓最后的等級小就可以了,這樣可以把等級看做邊的權值,求以b為限制的最短路。
優先想到Dijstra,但數據量特別大,所以需要用堆優化,基本是抄的模板。
(上面都是廢話,附上官方題解)
轉載于:https://www.cnblogs.com/luoxiaoyi/p/9726829.html
總結
以上是生活随笔為你收集整理的HDU-6290_奢侈的旅行(Dijstra+堆优化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大型网站系统与Java中间件实践 01
- 下一篇: 面试之作用域链与闭包