アルゴリズムの問題戦闘戦略NTHLON

住所  https://algospot.com/judge/problem/read/NTHLON

 

 

 

 

 

 

  1つの#include <iostreamの>
   2の#include <ベクトル>
   3。の#include <アルゴリズム>
   4。の#include <キュー>
   5。 
  6。 
  7。 使用した 名前空間STD;
   8  
  。9  int型V;
 10の // ペア方式を格納する図隣接テーブル手段(接続特許頂点エッジ重み値)
11。ベクトル<ペア< INTINT >> ADJ [ 410 ];
 12である CONST  INT START = 401 ;
 13である のconst  int型 INF = 0x3f3f3f3f ;
 14  
15  
16ベクター< INT >ダイクストラ(int型のSRC)
 17  {
 18      ベクター< INT > DIST(V、INF)。
19      [ソース] = DIST 0 20      PRIORITY_QUEUE <ペア< INTINT >> PQ。
21      pq.push(make_pair(0 、SRC))。
22  
23      ながら(!{pq.empty())
 24          のintコスト= - pq.top()最初。
25          INTここ= pq.top()は、第2。
26          pq.pop()。
27 
28          もし(distの[ここ] <コスト)続けます29  
30          のためにINT iは= 0 ; I <ADJ [ここ] .size()++ {I)
 31              INTが= ADJ [ここ] [i]が1次回。
32              INT nextDist =コスト+ ADJ [ここ] [I] .second。
33  
34              であれば(DIST [存在]> nextDist){
 35                  DIST [存在] = nextDist。
36                  pq.push(make_pair( - nextDist、そこ))。
37              }
 38          }
 39      }
40  
41は     戻り、DIST
 42である }
 43である 
44れる // ======================================= ===================
 45  
46  // 号頂点リターン(期待時間のかかる国-Bは、時間のかかる国の選手が期待される選手を)
47  int型の頂点(int型デルタ){
 48      リターンはデルタ+ 200である;
 49  }
 50  
51である 。// [] =プレイヤー加工期待状態
 52である // B [] B =予想加工状態プレーヤ
53は intを解決(CONSTベクトル< int型 > A&、constのベクトル< int型 >&B){
 54      // 生成图结构
55      V = 402 56      のためにINT iは= 0 ; I <V I ++ ADJ [I] .clear();)
57      のためにINT iは= 0を I ++; I <a.size(){)
 58          のint -デルタ= [I] 、B [i]は、
59          ADJ [START] .push_back(make_pair(頂点(デルタ)、[I]))。
60      }
 61  
62      // 当前耗时之差
63      のためのint型デルタ= - 200 ;デルタ<= 200; ++ デルタ){
 64          // i番目のイベントの添加
65          のためにINT iが= 0 ; iが<a.size(); ++ i)が{
 66              、INT次にデルタ+ = A [i]が- B [私は];
 67              // 頂点加工200以上の差が発生する必要はありません
68              IF(ABS(次へ)> 200である続行;
 69              。ADJ [頂点(デルタ)]一back(make_pair(頂点(次)、[I ]));
 70          }
 71である     }
 72  
73である      ベクトル< 整数 > =最短ダイクストラ(START);
 74      INTRET =最短[頂点(0 )]。
75      であれば(RET == INF)リターン - 1 76      リターンRET;
77  }
 78  
79  
80  
81  
82  
83  のint main()の
 84  {
 85      INT N、M。
86      CIN >> N。
87      一方(N-- ){
 88          CIN >> M。
89          ベクトル< int型 > VA;
90          ベクトル< int型 >VB;
91          のためにINT iは= 0 ; I <M、I ++ ){
 92              int型A、B。
93              CIN >> B;
94              va.push_back(A)。
95              vb.push_back(B)。
96          }
 97          INT RET = (VA、VB)を解きます。
98          であれば(RET =! - 1 ){
 99              COUT << RET << ENDL。
100          }
 101          {
 102              COUT << " IMPOSSIBLE << ENDL;
 103          }
 104      }
 105  
106  
107      戻り 0 ;
 108 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/itdef/p/11918625.html