HDU3047 Zjnuスタジアム(加重互いに素セット)

クラシックベクター法、単にライン上の数学的関係を見つけます

#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。
    } 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/ctyakwf/p/12409973.html