E - Верный Editorial

Time Limit: 6 sec / Memory Limit: 512 MB

問題文

IOI2015の開催されたアルマトイは昔、Верный(ヴェールヌイ)という名前であった。
どうやらロシア語で「忠実な」とか「信頼できる」とかいった意味があるらしい。。
joisinoお姉ちゃんは、これを聞いて、部下が自分にいかに忠実かを試そうとした。

まず、木Xと木Yを用意した。各頂点は00から(木の頂点数1)(木の頂点数-1)までの名前がついており、'a'から'j'までのどれかの小文字のアルファベットが一つ書かれている。

以下の操作をQQ回行う。

  • AAからBBまでの木X上のパス(AA,BB含む)上にあるアルファベット2つを入れ替える。
      例えば、a'a'b'b'を入れ替えると、パス上のa'a'b'b'となり、b'b'a'a'となる。
  • AAからBBまでの木Y上のパス(AA,BB含む)上にあるアルファベット2つを入れ替える。
      例えば、a'a'b'b'を入れ替えると、パス上のa'a'b'b'となり、b'b'a'a'となる。
  • 木XのAAからBBまでのパス(AA,BB含む)上にあるアルファベットを並べた文字列と、木YのCCからDDまでのパス(CC,DD含む)上にあるアルファベットを並べた文字列が完全に一致するか、そうでないかを答える。
  • aa回のクエリを実行した直後の状態に戻す。
      ただし、(このクエリを処理する前に処理したクエリの数)≧aa00とする。

  • 制限

    11QQ10510^5
    11(Xの頂点数)(木Xの頂点数)10510^5
    11(Yの頂点数)(木Yの頂点数)10510^5

    配点

    • この問題に部分点は存在しない。すべてのテストケースに正解すると100100点が得られる。

    入力

    入力は以下の形式で標準入力から与えられる。

    木Xについてのデータ
    木Yについてのデータ
    QQ
    クエリ1クエリ1
    クエリ2クエリ2
    .
    .
    .
    クエリQクエリQ
    
     始めに、木Xについてのデータが与えられる。
     その次に、木Yについてのデータが与えられる。
     その次に、クエリ数を指す整数QQが1行で与えられる。  その次のQQ行は各クエリを意味する。
     各木のデータは、以下の形式で与えられる。
    NN
    ss
    a1a_1 b1b_1
    a2a_2 b2b_2
    .
    .
    .
    aN1a_N-1 bN1b_N-1
    
     データ内の1行目に、木の頂点数NNが整数で与えられる。
     次の1行に、長さNNの文字列sが与えられる。この文字列のi+1i+1文字目(00iiNN)は、木の頂点iに書かれている小文字を指す。
     次のN-1行の各行は、木の辺を意味する。
     aia_ibib_iは、頂点aia_iと頂点bib_i(00iiN1N-1)の間に辺があることを意味する。

     各クエリは1行から与えられる。  まず、初めにクエリの種類を指す整数ttが与えられる。  
       
    • ttが0の時
       空白区切りでこの後に整数aa,bbと小文字cc,ddがこの順で与えられる。  これは、木Xの頂点aa,bb間のパス上の頂点(aa,bb含む)それぞれにおいて、ccが書かれている場合ddに、ddが書かれている場合ccに書き換えることを意味する。  
    •  
    • ttが1の時
       空白区切りでこの後に整数aa,bbと小文字cc,ddがこの順で与えられる。  これは、木Yの頂点aa,bb間のパス上の頂点(aa,bb含む)それぞれにおいて、ccが書かれている場合ddに、ddが書かれている場合ccに書き換えることを意味する。  
    •  
    • ttが2の時
       空白区切りでこの後に整数aa,bbと小文字cc,ddがこの順で与えられる。  これは、(木Xの頂点aa,bb間のパス上の頂点(aa,bb含む)に書かれている文字を、aaから順に並べたときの文字列)と(木Yの頂点cc,dd間のパス上の頂点(cc,dd含む)に書かれている文字を、ccから順に並べたときの文字列)が一致するかしないかを答えることを意味する。  
    •  
    • ttが3の時
       空白区切りでこの後に整数aaが与えられる。  これは、木Xと木Yを、aa回クエリを処理した直後の状況に戻すことを意味する。  

    出力

     それぞれのクエリにおいてttが2のとき、文字列が一致する場合"YES""YES"、一致しない場合"NO""NO"を1行に出力せよ。
     なお入力全体の最後には改行を忘れないこと。


    入力例11Copy

    Copy
    4
    ckdl
    0 2
    0 1
    1 3
    4
    lckd
    2 1
    1 3
    2 0
    4
    2 2 3 3 0
    2 2 3 0 3
    2 3 2 0 3
    2 3 2 3 0
    

    出力例11Copy

    Copy
    YES
    NO
    YES
    NO
    


    2025-04-01 (Tue)
    20:09:25 +00:00