https://vjudge.net/problem/POJ-3255
nは短絡1を求めます
ただ、いくつかの詳細に注意を払う、DJにそれを変更
#include <iostreamの> する#include <cstdioを> する#include <アルゴリズム> の#include <CStringの> する#include <キュー> の#define RI登録INT の#define U INT の#define NN 5005 の#define MM 100005 名前空間{高速 Uをインラインで() { UX(0 )。 チャー S = GETCHAR()。 一方、(S < ' 0 ' || S> ' 9 ' ){ S = GETCHAR()。 } 一方、(S> = ' 0 ' && S <= ' 9 ' ){ X =(X << 1)+(X << 3)+ S- ' 0 ' 。 S = GETCHAR()。 } 戻りX; } } 使用して速い:: に。 名前空間すべて{ UのCNT、N、M、D [ 2 ] [NN]、H [NN]。 構造体ノード{ Uに、次、VA。 } [MM << 1 ]。 インラインボイドアドオン(CONST U&X、CONST U&Y、CONST U&Z){ [ = hの.next ++ CNT] [X]、[CNT] .TO = Y、[CNT]の.Va = Z、H [X] = CNT。 } のtypedefのstd ::ペア <U、U> P。 std :: PRIORITY_QUEUE <P、のstd ::ベクトル<P>のstd ::大きい<P>> Q。 ボイド DJ(CONST U&X){ のstd ::のmemset(D、0x3fを、はsizeof (d)参照)。 q.push(P(0、x))を、D [ 0 ] [X] = 0 ; しばらく!( q.empty()){ 。。U _x(q.top()秒)、_ DIC(q.top()最初)。 q.pop(); もし(D [ 1 ] [_ X] <_ DIC)続けます。// 注意这里一定是<而不是<= ため(RI I(H [_x]); I;私は= [I] .next){ U字_y([I] .TO)、_ Z([Iを]の.Va + _dic)。 もし(D [ 0 ] [_ Y]> _Z){ のstd ::スワップ(D [ 0 ] [_ Y]、_ Z)。// 交换 q.push(P(D [ 0 ] [_ Y]、_ Y))。 } もし、(D [ 1 ] [_ Y]> _ Z && _ Z> D [ 0 ] [_ Y]){ //这里一点要判_Z> D [0] [_ Y] STD ::スワップ(D [ 1 ] [_ Y]、_ Z)。 q.push(P(D [ 1 ] [_ Y]、_ Y))。 } } } } インラインボイドは、{()解決 N = において M =、()内の()。 用(RI I(1); I <= M; ++ I){ U字_A(中())、_ B(中())、_ C(中())。 (_a、_B、_C)を追加し、(_B、_a、_C)を加えます。 } DJ(1 )。 printf(" %dの "、D [ 1 ] [N])。 } } int型のmain(){ // freopenは( "X.TXT"、 "R"、STDIN)。 // freopenは( "my.txt"、 "W"、STDOUT)。 すべて::)(解きます。 }