링크 : https://ac.nowcoder.com/acm/contest/884/J
귀하는 graph.Every 에지 연결된 undirect 주어진 T에 S에서 경로를 선택해야 pass.You에 비용이 당신은 당신의 경로에있는 모든 가장자리를 지불 할 필요가있다. 그러나 그래프에서 가장 K 가장자리에서 선택하고 시작 0으로 비용을 변경할 수 있습니다. 당신이 지불하는 데 필요한 최소한의 총 비용에 답변 해주세요.
설명을 입력합니다 :
첫 번째 라인은 다섯 개 정수 N, M, S, T, K를 포함한다.
다음의 m 행의 각각에 대해, 세 개의 정수 A, B, L은 A와 B 사이의 L 비용 에지가 의미가있다.
N은 노드와 m의 수가 에지의 수이다.
출력 설명 :
최소 총 비용을 의미하는 정수입니다.
비고 :
1≤n, m≤103,1≤S, T, A, b≤n, 0≤k≤m, 1≤l≤106 1 ≤ N , m의 ≤ 1 0 3 , 1 ≤ S , T , , B ≤ N , 0 ≤ k 값 ≤의 m , 1 ≤ L ≤ 1 0 6. 다중 가장자리와 자기 루프가 허용된다.
1 #INCLUDE <iostream> 2 #INCLUDE <큐> 3 #INCLUDE <CString을> 4 이용한 스페이스 성병; 5 6 CONST의 INT N = INT (1e3) + (10) ; 7 CONST INT INF = 0x3f3f3f3f ; 8 9 구조체 에지 { 10 INT 에 w 다음; 11 } E [N + N]; 12 (13) INT의 CNT 머리 [N], K; 14 15 공극 추가 ( int로 A, INT의 B,INT w) { 16 INT의 ID = ++ CNT; 17 = .TO의 E [ID] B; 18 E [ID] .W = w; 19 E [ID] 다음 내용 = 헤드 [A]; 20 헤드 [A] = ID; 21 } 22 23 구조체 노드 { 24 의 INT NUM, DIS, K; 25 부울 연산자 <( CONST 노드 X) CONST { 26 창 DIS> x.dis; 27 } 28 }; 29 30 INT힘 [N] [N], DIS [N] [N]; 31 32 공극 익스트라 ( INT의 S) { 33 priority_queue <노드> Q; 34 memset 함수 (힘, 0 , 는 sizeof (힘)); 35 memset 함수 (DIS, INF, 는 sizeof (DIS)); 36 DIS [들] [ 0 ] = 0 ; 37 q.push (노드 {S, DIS [S] [ 0 , 0 }); 38 동안 (! q.empty ()) { 39 노드 X = q.top (); 40 q.pop (); 41 INT N =x.num; 42 INT의 K = XK; 43 의 경우 (힘 [N] [K]) 계속 ; 44 힘 [N]을 [K] = 1 ; (45) 에 대한이 ( int로 -;! I = I = 헤드 [N] 1 , I = {E [i]는 다음 내용) 46 INT의 V = E [I] .TO, W = 전자 [I] .W; (47) 의 경우 (K <K && DIS [N] [K] <DIS [V] [K + 1 ]) { 48 DIS [V] [K + 1 ] = DIS [N] [K]; 49 q.push (노드 {V, DIS [V] [K + 1 , K + 1 }); (50) } (51) 의 경우 (w + DIS [N] [K] < DIS [V] [K]) { 52 DIS [V] [K] = DIS [N] [K] + w; 53 q.push (노드 {V, DIS [V] [K], K}); 54 } 55 } 56 } 57 } 58 59 INT 의 main () { 60 IOS :: sync_with_stdio ( 0 ); 61 memset 함수 (헤드 - 1 , 를 sizeof (헤드)); 62 INT의 N, M, S, T; 63 CIN >> >> m N >> S T >> >> K; 64 동안 (M--) { 65 INT의 A, B, L; 66 CIN 사항 >> >> B >> L; (67) 추가 (A, B, l); (68) 추가 (B, A, l); 69 } 70 익스트라 (S); 71 INT ANS = INF; (72) 에 대한이 ( int로 I = 0 ; I는 <= K를, 난 ++) ANS = 분 (ANS, DIS [T] [I]); 73 COUT << ANS << ENDL; 74 }