240食物連鎖をAcWing

#include <iostreamの>
 使用して 名前空間STD;
 constの 整数 N = 50010 ;
 INT N-、M;
 INT P [N]は、D [N];   // Pは馬場、dは距離であり
、INT(検索INT X){
     IF(P [X] = X){!は// xがルートでない場合
        、INT T =(P [X])を探す; // ルートノードが完成となるように割り当てた後に、それを保存する点 
        D [X] + = D [ P [ X]]; // の間の距離のルートノードへのルートとの距離に更新== +親の親ノード 
        P [X] = T; // 次に、ルートに割り当て
    }
     リターンP [X];     
} 
int型のmain(){ 
    scanfの(" %のD%のD "、およびN-、&M)
     のためのINT I = 1 ; I <= N; I ++)P [I] = I; //はそれ自体を初期化するには、収集され
    int型 RES = 0 ; / / で数嘘
    一方(M - ){
         int型 T、X、Y; // Tは、問い合わせの種類を表し 
        scanfの(" %D%D%D "、T&&X&Y)を、
         IF(X> || Y N-> N-)RES ++; // アウト範囲は、存在する
        {
             int型 PX =見つける(X)を、Pyを見つける=(Y)は、//を見つけるルート
            IF(T ==1){   // 同じ場合
                IF(PX == Pyを&&(D [X] - D [Y])%3// 3%の設定した場合との範囲であった 
                    RES ++; // 
                 IF(!PX = PY){ // ルートノードが異なる場合、セットではない 
                    P [PX = PY; // のルートのPX、PYに入れ 
                    D [ピクセル] = D [Y ] - D [X] ; // 同じクラスので、それは3%に等しく、距離の差が直接
                } 
            }  { //は食べ物を食べる表すのX、Y、次いでD [X] -d [Y] = 1の場合。
                IF(PX == &&のPy (D [X] - D [Y] - 1)%3// の設定した場合ではなく、1
                    ++ RES; // 
                 IF(PX = Pyと!){ // そうでない場合の組 
                    P [PX = Pyと; // マージ 
                    D [PX] = D [Y] + 1 - D [X]。
                } 
            } 
        } 
    } 
    のprintf(" %D \ N- " 、RES);
     戻り 0 ; 
}

 

 

おすすめ

転載: www.cnblogs.com/QingyuYYYYY/p/11816425.html
おすすめ