// 負の重み // 我々が負のサイクルを見つけることができる場合、一般的に存在しない // 最小距離は負の無限大であり得ることを負ループ場合 の#include <CStringの> する#include <iostreamの> 使用して 名前空間STD; constの 整数 N = 1E4 + 1。; 構造体のエッジ{ INT A; int型のB; INT W; }エッジ[N]; int型N-、M、K; INT DIST [N]、バックアップ[N]; ボイドbellman_ford(){ memsetの(DIST、は0x3F、sizeof DIST); DIST [ 1 ] = 0 ; /// / K番目の反復示しもはやKエッジは、各点から来るより ため(INT I = 0 ;私は<K; I ++ ){ memcpyを(バックアップ、DIST、はsizeof DIST); // バックアップしませんバックアップ系列なしで起こり得る ため(INT J = 0 ; J <M、J ++ ){ IF(DIST [エッジ[J] .B]>バックアップ[エッジ[J] II.A] + エッジ[J] .W){ INT A =エッジ[J] II.A、B =エッジ[J] .B、W = エッジ[J] .W; DIST [B] =分(DIST [B]、バックアップ[A] + W); } } } IF(DIST [N - ]> 0x3f3f3f3f / 2)裁判所未満<< 「不可能」。 他の coutの<< distの[N]; } int型のmain(){ CIN >> N >> M >> K。 以下のために(INT iは= 0 ; I <M; iは++ ){ int型、B、W。 CIN >> B >> ワット。 エッジ[I] = {A、B、W}。 } )(bellman_ford。 リターン 0 ; }