障害物POJ - 3255(短絡)

https://vjudge.net/problem/POJ-3255

 

 

 

 

書式#include <iostreamの> 
の#include <CStringの> 
の#include <キュー> 
の#include <ベクトル>
 使用して 名前空間をSTD。
ペアのtypedef < int型int型 > P;
CONST  INT N = 2E5 + 10 構造体のエッジ{
     INT に、次の、W。
}エッジ[N]。

INT ヘッド[N]、DIS1 [N]、DIS2 [N]。
INT CNT、N、R。

PRIORITY_QUEUE <P、ベクトル<P>、大きな<P>> Q。

// 链式前向星
のボイド addEdge(int型のu、int型 V、INT コスト){ 
    エッジ[ ++ CNT] .TO = V。
    エッジ[CNT] .W = コスト。
    エッジ[CNT] .next = 頭部[U]。
    ヘッド[U] = CNT。
} 

ボイドダイクストラ(INT S){ 
    DIS1 [S] = 0 ; 
    q.push(P(0 、S))。
    一方、(!q.empty()){ 
        P T = q.top()。
        q.pop(); 
        int型 D = t.first、CUR = t.second。
        もし(DIS2 [CUR] <d)は続けますにとってのInt I =ヘッド[CUR];!私は= - 1 ;エッジI = [I] .next){ // 検索エッジ
            INT D2 = Dエッジ+ [I] .W、U = エッジ[I] .TO。
             IF(D2 <DIS1 [U]){   // 更新時間より短い経路更新最短経路前 
                DIS2 [U] = DIS1 [U]; 
                DIS1 [U] = D2; 
                q.push(P(DIS1 [U]、U) ); 
            } 
            IF(D2> DIS1 [U] && D2 <DIS2 [U]){ // 再度短絡が発生した場合の解析 
                DIS2 [U] = D2と、
                q.push(P(DIS2 [U]、U)) ; 
            } 
        } 
    } 
} 

int型メイン(){ 
    IOS :: sync_with_stdio(0 )。
    memsetの(頭、 - 1はsizeof (ヘッド))。
    memset(DIS1、0x3fをはsizeof (DIS1))。
    memset(DIS2、0x3fをはsizeof (DIS2))。
    int型U、V、Cを。
    CIN >> N >> R。
    以下のためにINT iが= 1 ; I <= R; I ++ ){ 
        CIN >> U >> V >> C。
        addEdge(U、V、C)。
        addEdge(V、U、C)。
    } 
    ダイクストラ(1)。
    COUT << DIS2 [N]。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/xcfxcf/p/12642433.html