2019 아시아 난창 (南昌) 1 라운드에서 온라인 프로그래밍 대회 B. 소방 영웅

주제 링크 : https://nanti.jisuanke.com/t/41349

질문의 의미 :이 것은 소방 영웅과 소방 팀, 팀 남자와 비교입니다.

다른 화재의 팀과 함께, 최대 포인트 소화에 최단 영웅 다른 소방 비교를 위해, 최대 거리 * C의 짧은 점.

우리는 가상 점 "0"점을 구축 할 수 있도록 한 점 k에 하나 개의 팀이 가장 짧은 점 k는 0의 경우, 가장 짧은 팀을 실행

다른 팀 구성원이 INF로 다른 점, 0을 가리 키도록 "0"점을하자, 다음 가장 단락 그 중 하나를 실행할 수, 다음 코드 변경, 너무 게으른 게임 시간, 직접보고 쓴 어렵다.


  1 #INCLUDE <iostream>
   2 #INCLUDE <CString을>
   3 #INCLUDE <알고리즘>
   4 #INCLUDE <cstdio>
   5 #INCLUDE < 문자열 >
   6  이용한  스페이스 성병;
  7  
  8 의 typedef  LL;
  9  #DEFINE INF 1E9
 10  #DEFINE 렙 (I, J, K)에 대해 INT (I = (j) 내가 = (K <); 나는 ++)
 11  #DEFINE 렙 __ (i, j, k)에 대해 (ⅰ에서 INT = (j) 내가 <(K); I ++)
 12  #DEFINE = (K), 난 -) I, 당 (I, J, K) (INT I = (j 대)>
 13  #DEFINE__ (i, j, k)에 대해 당은 (i = (j를 INT); I> (K), 난 -)
 14  
15  CONST의  INT = N (1100) ;
16  BOOL 힘 [N];
17  INT의 MP [N] [N];
18  BOOL이 소성 [N];
19  INT의 팀 [N];
20  INT DIS [N];
21  INT의 V, E, S, K, C;
(22)  
(23)  의 INT 익스트라 ( INT의 S) {
 24  
25      렙 (I, 1 , V) 힘 [I] = 거짓 ;
(26)  
(27)      의 경우 (S) {
 28          렙 (I,1 , V) DIS [I] = INF;
29          렙 (I, 1 , V) DIS [내가] = MP [S] [I];
도 30은          힘 [들] = ;
31  
32          렙 (I, 2 , V) { // 团队的
33  
(34)              INT (X) = - 1 ;
35              INT C = INF;
36  
37              렙 (j, 1 , V) {
 38                  
(39)                  의 경우 X = J, C = (힘 [J] && C> DIS [J]!) DIS [J]
(40)              }
 (41)              의 경우 (X == - 1) 계속 ;
(42)  
(43)은              힘 [X] = ;
44              렙 (p, 1 , V) {
 45                  의 경우 (! 힘 [P] && DIS [X] + MP [X] [P] < DIS [P]) {
 46                      DIS [P] = DIS [X] + MP [X] [P];
47                  }
 48              }
 49  
50          } 
 51      }
 (52)       { // 英雄的
53          렙 (I, 1 , V) DIS [I] = INF;
54          렙 (I, 1, K는) 팀 [I] DIS = 0 ;
(55)은          힘 [들] = ;
56  
(57)          렙 (I, 1 , V) {
 58  
(59)              INT (X) = - 1 ;
60              INT C = INF;
61  
62              렙 (j, 1 , V) {
 63                  
(64)                  의 경우 X = J, C = (힘 [J] && C> DIS [J]!) DIS [J]
(65)              }
 (66)              의 경우 (X == - 1 ) 계속 ;
67  
68              힘 [X] = ;
69              렙 (p, 1 , V) {
 70                  의 경우 (! 힘 [P] && DIS [X] + MP [X] [P] < DIS [P]) {
 71                      DIS [P] = DIS [X] + MP [X] [P];
72                  }
 73              }
 74  
75          } 
 76      }
 77  
78  
79      INT ANS = 0 ;
80      렙 (I, 1 , V) {
 81          
(82)          의 경우 (DIS [I] == INF) 계속 ;
83          의 경우 (소성 [I]) ANS = 최대 (ANS, DIS [I]);
84      }
 85  
86      복귀 ANS;
87  }
 88  
89  INT 의 main () {
 90  
91      IOS :: sync_with_stdio ( 거짓 );
92      cin.tie ( 0 );
(93)  
(94)      INT T;
95      CIN >> T;
96  
97      INT를 p = 0 ;
98      INT에 Q = 0 ;
99      동안 (T-- ) {
 100          CIN V >> >> E >> S K >> >> C;
101          
102         렙 (I, 1 , V) 렙 (j, 1 , V) {
 103              경우 (I == J) MP [I] [J] = 0 ;
104              다른 MP [I] [J] = INF;
105          }
 106  
107          렙 (I, 1 , K) {
 108              CIN >> 팀 [I];
109          }
 110  
111          int로 U를, V, w;
112  
113          렙 (I, 1 , E) {
 114              CIN >> >> U V >> w;
115              [V] = 소성 ;
116              만약(MP [U] [V]> W는) {
 117                  MP [U]는 [V]를 MP = [V] [U] = w;
118              }
 119          }
 120  
121          p = 익스트라 (S); // 英雄
122      
123          Q = 익스트라 ( 0 ); // 团队
124  
125          의 경우 (p <= Q * C) COUT << P << ENDL;
126           COUT << Q << ENDL;
127      }
 128  
129      getchar가 (); getchar가 ();
130  
131      복귀  0 ;
132 }

 

추천

출처www.cnblogs.com/SSummerZzz/p/11512251.html