「我要成為魔法少女!」
「那麼,以靈魂為代價,你希望得到什麼?」
「我要將有關魔法和奇蹟的一切,封印於卡片之中„„」
在這個願望被實現以後的世界裡,人們享受著魔法卡片(\(spellcard\),又名符卡)帶來的便捷。
現在,不需要立下契約也可以使用魔法了!你還不來試一試?
比如,我們在魔法百科全書(\(encyclopedia of spells\))裡用「\(freeze\)」作為關鍵字來查詢,會有很多有趣的結果。
例如,我們熟知的\(cirno\),她的冰凍魔法當然會有對應的 \(spellcard\) 了。 當然,更加令人驚訝的是,居然有凍結時間的魔法,\(cirno\) 的凍青蛙比起這些來真是小巫見大巫了。
這說明之前的世界中有很多魔法少女曾許下控制時間的願望,比如 \(akemi homura\)、\(sakuya izayoi\)、„„
當然,在本題中我們並不是要來研究歷史的,而是研究魔法的應用。
我們考慮最簡單的旅行問題吧: 現在這個大陸上有 \(n\) 個城市,\(m\) 條雙向的道路。城市編號為 \(1~n\),我們在 \(1\) 號城市,需要到 \(n\) 號城市,怎樣才能最快地到達呢?
這不就是最短路問題嗎?我們都知道可以用 \(dijkstra、bellman-ford、floyd-warshall\)等演算法來解決。
現在,我們一共有 k 張可以使時間變慢 \(50\%\)的 \(spellcard\),也就是說,在通過某條路徑時,我們可以選擇使用一張卡片,這樣,我們通過這一條道路的時間 就可以減少到原先的一半。需要注意的是:
在一條道路上最多只能使用一張 \(spellcard\)。
使用一張\(spellcard\) 只在一條道路上起作用。
你不必使用完所有的 \(spellcard\)。
給定以上的資訊,你的任務是:求出在可以使用這不超過 \(k\) 張時間減速的 \(spellcard\) 之情形下,從城市\(1\) 到城市\(n\)最少需要多長時間。
輸入格式:
第一行包含三個整數:\(n、m、k\)。
接下來 \(m\) 行,每行包含三個整數:\(a_i、b_i、time_i\),表示存在一條 \(a_i\)與 \(b_i\)之間的雙向道路,在不使用 \(spellcard\) 之前提下,通過它需要 \(time_i\)的時間。
輸出格式:
輸出乙個整數,表示從\(1\) 號城市到 \(n\)號城市的最小用時。
輸入樣例#1:
4 4 1
1 2 4
4 2 6
1 3 8
3 4 8
輸出樣例#1:
7
樣例解釋:
在不使用 \(spellcard\) 時,最短路為 \(1à2à4\),總時間為 \(10\)。現在我們可以使用 \(1\) 次 \(spellcard\),那麼我們將通過 \(2à4\) 這條道路的時間減半,此時總時間為\(7\)。
對於\(100\%\)的資料:\(1 ≤ k ≤ n ≤ 50,m ≤ 1000\)。
\(1≤ a_i,b_i ≤ n,2 ≤ time_i ≤ 2000\)。
為保證答案為整數,保證所有的 \(time_i\)均為偶數。
所有資料中的無向圖保證無自環、重邊,且是連通的。
思路:還是跟其他的分層最短路題目一樣,只不過之前的\(k\)次免費的機會變成了\(k\)次免費縮小到一半的機會,那麼分層的時候我們把邊權由\(0\)改為\(w/2\)就可以了。
**:
#include#include#include#include#include#define maxn 5000001
using namespace std;
int n,m,k,head[maxn],num,dis[maxn],s,t;
inline int qread()
struct edge e[maxn];
struct node
};inline void ct(int u, int v, int w)
priority_queueq;
inline void dijkstra() );
while(!q.empty()) );
} } }
}int main()
} }
dijkstra();
int zrj=0x7fffffff;
for(int i=0;i<=k;++i) zrj=min(zrj,dis[n+i*n]);
printf("%d\n",zrj);
return 0;
}
洛谷P5049 洛谷P5022 題解 旅行
原題 資料加強版 加強版 參考你谷題解 終於調過了 又是一如既往的申必錯誤 noi plus石錘了 原題的資料允許我們 o n 2 暴力斷邊,但是加強版的資料達到了 n log n 級別,我們必須在斷邊這一環節尋求更好的解法。考慮我們進入環後在何處回溯 根據繼續走環走到的點分類 設當前已經從 b 走...
洛谷練習P2279 P1346
2020年,人類在火星上建立了乙個龐大的基地群,總共有n個基地。起初為了節約材料,人類只修建了n 1條道路來連線這些基地,並且每兩個基地都能夠通過道路到達,所以所有的基地形成了乙個巨大的樹狀結構。如果基地a到基地b至少要經過d條道路的話,我們稱基地a到基地b的距離為d。由於火星上非常乾燥,經常引發火...
洛谷 P1396 營救
題目描述 咚咚咚 查水表!原來是查水表來了,現在 找這麼熱心上門的查表員啊!小明感動的熱淚盈眶,開起了門 媽媽下班回家,街坊鄰居說小明被一群陌生人強行押上了警車!媽媽豐富的經驗告訴她小明被帶到了t區,而自己在s區。該市有m條大道連線n個區,一條大道將兩個區相連線,每個大道有乙個擁擠度。小明的媽媽雖然...