跳跳虎回家(國慶10 1模擬賽T2)

2022-04-29 03:09:10 字數 2333 閱讀 4689

【題目描述】

跳跳虎在外面出去玩忘了時間,現在他需要在最短的時間內趕回家。

跳跳虎所在的世界可以抽象成乙個含有 n 個點的圖(點編號從 1 到 n ),跳跳虎現在在 1 號點,跳跳虎的家在 n 號點。

圖上一共有 m 條單向邊,通過每條邊有固定的時間花費。

同時,還存在若干個單向傳送通道,傳送通道也有其時間花費。

傳送通道一般來說比普通的道路更快,但是跳跳虎最多只能使用 k 次。

跳跳虎想知道他回到家的最小時間消耗是多少。

【輸入格式】

第一行輸入 4 個整數 n,m,q,k 。( n 表示點數,m 表示普信道路的數量,q 表示傳送通道的數量,k 表示跳跳虎最多使用 k 次傳送通道)

接下來 m 行每行 3 個整數 u,v,w ,表示有一條從 u 到 v ,時間花費為 w 的普信道路。( 1≤u,v≤n,1≤w≤103 )

接下來 q 行每行 3 個整數 x,y,z ,表示有一條從 x 到 y ,時間花費為 z 的傳送通道。( 1≤x,y≤n,1≤z≤103 )

【輸出格式】

輸出一行乙個整數表示最小時間消耗,如果沒法回到家輸出 -1 。

【樣例輸入】

5 5 2 1

1 2 1

1 3 2

2 4 2

3 4 3

4 5 4

1 4 1

2 5 1

【樣例輸出】

2【資料規模與約定】

對於30%的資料,1≤n≤500, 0≤m,q≤2000,k=0;

對於另外30%的資料,1≤n≤500,0≤m,q≤2000,k=1;

對於100%的資料,1≤n≤500,0≤m,q≤2000,0≤k≤109。

分層建圖,

定義 dis [ u ][ k ] 表示到結點 u ,共經過 k 條第二類邊的最短路。

顯然我們可以以 k 為階段劃分狀態,然後就劃分成了最短路的子問題。

dis [ u ][ k ] 可以轉移到 dis [ v ][ k ](第一類邊)和 dis [ v ][ k+1 ](第二類邊)。

然後就可以用dijkstar 求最短路求出答案。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 1001

#define inf 0x3f3f3f3f

intn,m,q,k;

int head[maxn],cnt=0

;int d[maxn][maxn<<1

];struct

hht[maxn<<2

];struct pd//

過載(做優先佇列用) };

priority_queue

q;inline

void add(int nex,int to,int dis,int

bo)inline

intread()

while

(isdigit(ls))

return xs*kr;

}inline

void dijkstra()//

dijkstra 最短路的雙層圖模板(和普通最短路模板基本一樣)

); d[

1][0]=0

;

while(!q.empty())

);//

存:邊權,已走過的傳送道路數,距點1 的距離

} }

}}int

main()

for(int i=1;i<=q;i++)

memset(d,inf,

sizeof

(d));

dijkstra();

int ans=inf;

for(int i=0;i<=min(q,k);i++)

ans=min(ans,d[n][i]);

if(ans==inf)//

判斷是否有路

printf(

"%d\n

",ans);

return0;

}

模擬 2018 9洛谷月賽T2

傳送門 一道模擬題?根據給出的條件可以分類討論列出關於k的不等式,然後求區間的交 但是求交不好求,可以轉化成求補集的並,還是挺常見的套路 具體實現還是很有技巧的,可以用結構體存這個點和它的型別 左端點or右端點 然後通過排序求並,具體細節看注釋 include include include inc...

20161005 NOIP 模擬賽 T2 解題報告

beautiful 2.1 題目描述 乙個長度為 n 的序列,對於每個位置 i 的數 ai 都有乙個優美值,其定義是 找到序列中最 長的一段 l,r 滿足 l i r,且 l,r 中位數為 ai 我們比較序列中兩個位置的數的大小時,以數值為第一關鍵字,下標為第二關鍵字比較。這樣的話 l,r 的長度只...

20161003 NOIP 模擬賽 T2 解題報告

weed duyege的電腦上面已經長草了,經過辨認上面有金坷垃的痕跡。為了查出真相,duyege 準備修好電腦之後再進行一次金坷垃的模擬實驗。電腦上面有若干層金坷垃,每次只能在上面撒上一層高度為 vi 的金坷垃,或者除掉最 新 vi 層 不是量 撒的金坷垃。如果上面只留有不足 vi 層金坷垃,那麼...