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 ; }