クラシックベクター法、単にライン上の数学的関係を見つけます
#include <iostreamの> する#include <アルゴリズム> の#include < ストリング > の#include <CStringの> する#include <ベクトル> の#include <cstdioを> する#include <マップ> 使用して 名前空間STDを、 CONST INT N = 1E5 + 10 。 整数N、M。 INT P [N]。 int型のD [N]。 int型の検索(INT X){ 場合(X =!P [X]){ int型、T = P [X]。 P [X] = 見つける(P [X])。 D [X]=(D [X] + D [T])%300 。 } 戻り[X] pは、 } int型のmain(){ 一方(CIN >> N >> M){ int型I。 memsetの(D、0、はsizeof D)。 int型 NUM = 0 ; 以下のために(iは= 1 ; iが<= N; I ++ ) P [i]は = I。 以下のために(iは= 1 ; iが<= M; I ++ ){ int型のx、B。 scanf関数(" %D%D%D "、&、&B、&X) int型 PA =見つける()、PB = (B)を見つけます。 もし(PA == PB){ もし、(((D [A] -d [B])%300 + 300)%300 =( - X +!300)%300 ) NUM ++ 。 } 他{ P [PA] = PB。 D [PA] =(( - D [A] -x + D [B])%300 + 300)%300 。 } } COUT << NUM << ENDL。 } }