ナイトゲーム(spfa良いタイトル)

P4042 [AHOI2014 / JSOI2014]ナイトゲーム

分析:
SPFA良い質問
明らかシフトである:[U] =分([V])F呪文、シグマ(F )
も側別の関係を生成することが明らかにモンスターである
が、問題は、現在のF後遺症が存在することですuは他の点に影響を与える前に、fは[U]は更新され、また、発生する可能性があり
、この問題を解決することができ、spfa。
伝達方程式は緩和操作と見られている、すべての時間がuは、uはポイントにしても説明し、再度更新する必要がある場合に更新することができる
ように待機して、チームに再びさえUのポイントに、オリジナルのビルド抗マップので、更新

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#define RIレジスタint型
 の#define N 200005
 の#defineっ長い長
 BOOL VIS [N]。
int型のn;
LL DIS [N]、[N]。
ベクター < INT > E1 [N]。
ベクター < INT > E2 [N]。
spfa()
{
    キュー < 整数 > Q;
    (RI i = 1 ; I <= N; ++ I)q.push(I)、VIを[I] = 1 しばらく(!q.empty()){
         int型のu = q.front(); q.pop(); VIS [U] = 0 ; // printfの( "U:%dは\ nを"、U); 
        LL TMP = A [U]。
        (RI i = 0 ; I <E1 [U] .size(); ++ I)TMP + = DIS [E1 [U] [I]]。
        もし(TMP> = DIS [U])続けます
        DIS [U]は = TMPと、
        (RI i = 0 ; I <E2 [U] .size(); ++ I){
             int型 V = E2 [U] [I]。
            もし(!VIS [V])q.push(V)、VIS [V] = 1 ;
        }
    }
    printf(" %LLDする\ n "、DIS [ 1 ])。
}
int型のmain()
{
    scanf関数(" %のD "、&N)
    int型のx、XX;
    (RI i = 1 ; iが<= N ++ {I)
        scanf関数(" %LLD%LLD%D "、および[I]、&DIS [i]は、&x)は、
        一方、(x-- ){
            scanf関数(" %のD "、&XX)。
            E1 [i]は.push_back(XX)。E2 [XX] .push_back(I)。
        }
    }
    spfa();
    リターン 0 ;
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/mowanying/p/11777996.html