木からLCA互いに素セットをグラフ化します

  問題の意味:[i]の[1] ^ F [2] ^ F [3] ^ .. ^ F [n]は$ Fを現在のツリーツリー$ fに答えを与えられたが、ツリーの私はユニコムを削除ポイントを表しブロックの数   

  Mは、二つの操作、各時間点を有し、その後もツリーに答えるエッジを出力します

 

タイトル

解決法:答えはあなたが良いスタートを扱うことができるように、その答えの各点にお答えすることが明らかに時間の始まりです

    2つの点が一緒に接続した場合には、[保存]をお答えします(両方とも包括的ではない)ポイントのパスで通過するとき   

           しかし、与えられた、時には繰り返しアップデートはただ試合に回数を減らすことへの答えかもしれないどのように多くの人の息子、彼は明らかに彼の息子にすべてのポイントのエッジを転送することができます

    その結果、各側にのみ横断することができる家を維持するために、互いに素セットポイントとそれがMの複雑さの均等複雑共有されると

    ゲームはLCAカードがツリーセクションのLCAで書かれていた場合には、実際にプリアウトすることができ、すべてのLCA暴力を

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
CONSTの INT N = 5E3 + 10 INT F [N]、N、A、B、X [ 2 ]、Y [ 2 ]、Z [ 2 ]、度[N]、ANS、M。
INT find1(INT X){ リターン?[X] == X X F:[X] = F find1([X] F);}
 int型DEP [N]、FA [N]、SIZ [N]、予め[ N]、ID [N]、LCA [N] [N]、POS、NCNT、ヘッド[N]。
構造体のエッジ{ INT NEX、へ;}エッジ[N << 1 ]。
ボイド追加(INT A、INT B){エッジ[++ POS] =(エッジ){B、ヘッド[A]};ヘッド[A] = POS;}
 ボイドDFS(int型のx、int型F)は
{ 
    FA [x]は Fを=; DEP [X] = DEP [F] + 1 ; ID [X] = ++ NCNT; NCNT] = xを予め; SIZ [X] = 1 ; LCA [X] [X] =のX。
    以下のためにint型 ; I I = I =ヘッド[X] エッジ[I] .nex)
    { 
        int型 V = エッジ[I] .TO。
        もし(vは== f)を続けます
        DFS(V、x)は、SIZ [X] + = SIZ [V]。
        INT J = ID [X]; J <ID [V]であり、j ++ のための整数 kを++、K = ID [V]; kは、<ID [V] + SIZ [V] 
            [[j]を事前] LCA [プレ[K]= LCA [プレ[K] [プレ[J] =のX。
    } 
} 
ボイド解く(int型のx、int型のY)
{ 
    X = find1(X)
    一方(DEP [X]> DEP [Y] + 1 
    { 
         ANS ^ = ゜[FA [X]]。
         DEG [FA [X]] - 
         ANS ^ = ゜[FA [X]]。
         F [X] = FA [X]。
         X = find1(FA [X])。
    } 
} 
ボイドのinit()
{ 
    INT I = 0; iが<= N; iは++)F [I] = I、ヘッド[I] = 0、DEG [I] = 0 ; 
    NCNT = ANS = POS = 0 
} 
int型のmain()
{ 
    一方(scanf関数(" %D%D%D%D%D%D "、およびN、M、&、&B、&X&[ 0 ]、&Y [ 0 ])!= EOF)
    { 
        int型U 、V; 
        初期化(); 
        以下のためにint型 I = 1(scanfのiは++; iがn <)を" %d個の%のD "、&​​U&V)、DEG [U] ++、DEG [(u、v)は、(V U)を追加V] ++ ; 
        DFS(00 );
        ためにint型 i = 0 ; iが++; iがN <)ANS ^ = [I]゜; 
        Z [ 0 ] = ANS。
        以下のためにint型 iは= 1 ; I <= M iは++ 
        { 
            X [ 1 ] =(* X [ 0 ] + b *のY [ 0 ] + Z [ 0 ])%のN。
            Y [ 1 ] =(B * X [ 0 ] + *のY [ 0 ] + Z [ 0 ])%N。
            (X【解決1 ]、LCA [X [ 1 ]、[Y [ 1 ])。
            Z [ 0 ] = ANS; X [0 ] = xが[ 1 ]; yは[ 0 ]、Y [= 1 ]。
        } 
        のprintf(" %D%D \ n "、X [ 1 ]、Y [ 1 ])。
    } 
    戻り 0 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/bxd123/p/11618282.html