溶液
emmm ......差動制約裸のタイトル。収入の金額正と負の値が、そうでも0エッジ私のようなスマートにしようとしないことに注意してください。。。
また、複数のデータセットが空ではない、OIはゼロ参照の先祖をバースト。。。
コード
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 CONSTの INT N = 105、M = 1005 。 インラインint型リード(){ int型のx = 0、W = 0。CHAR CH = 0 。 しばらく W | = CH ==(isdigit(CH)!)' - '、CH = getchar関数(); 一方、(isdigit(CH))X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR()。 リターン? -ワット; X:X } 構造体のエッジ{ int型のV、W、最後; } E [M << 1 ]。 int型のTOT、尾[N]; インラインボイド追加(int型のx、int型の Y、int型Z){ E [ ++ TOT = (エッジ){Y、Z、尾[X]}。 尾[X] = TOT。 } int型、T、N、M、D [N]。 BOOL VIS [N]。 BOOL dfs_SPFA(INT X){ VIS [X] = 真。 用(INT ; P P = P =尾[X] {E [P] .last) INT&V = E [P] .V、&W = E [P] .W。 もし(D [x]は<W + {D [V]) dは[V]、D [X] + = Wは、 もし(VIS [V] ||!dfs_SPFA(V)) を返す 偽。 } } VIS [X] = 偽。 返す 真; } ブールチェック(){ memsetの(D、0、はsizeof D)。 memsetの(VIS、0、はsizeof VIS)。 以下のために(int型私= 0 ;私は= N <; ++ I) の場合(!dfs_SPFA(I))返す 偽; 返す 真; } int型のmain(){ T = 読み取ります()。 一方、(t-- ){ TOT = 0 ;のmemset(尾、0、はsizeof 尾)。 N = read()は、M = read()は、 一方、(M-- ){ int型のx =読み取る()、y)は(読み取り=、Z =を読み取ります()。// Y、X-1 の追加(Y、X- 1、-z)、追加(X- 1 、Y、Z)。 } // ための式(I = 0 int型、iがN <; ++ i)が(I + 1をI 0)を追加します。 プット(チェック()?" 真":" 偽" ); } 戻り 0 。 }