atcoder#ARC097B. [ABC097D] Equals

[ABC097D] Equals

题目描述

1 1 から N N までの整数を並び替えた順列 p1 p_1 , p2 p_2 , .., pN p_N があります。 また、 1 1 以上 N N 以下の整数のペアが M M 個与えられます。 これらは (x1,y1) (x_1,y_1) , (x2,y2) (x_2,y_2) , .., (xM,yM) (x_M,y_M) で表されます。 シカの AtCoDeer くんは順列 p p に次の操作を好きなだけ行って、 pi = i p_i\ =\ i となる i i (1 1 < = <\ = i i < = <\ = N N ) の数を最大にしようと考えています。

  • 1 1 < = <\ = j j < = <\ = M M なる j j を選び、 pxj p_{x_j} pyj p_{y_j} をスワップする

操作後の pi = i p_i\ =\ i となる i i の数として考えうる最大値を求めてください。

输入格式

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

N N M M p1 p_1 p2 p_2 .. .. pN p_N x1 x_1 y1 y_1 x2 x_2 y2 y_2 : : xM x_M yM y_M

输出格式

操作後の pi = i p_i\ =\ i となる i i (1 1 < = <\ = i i < = <\ = N N ) の数として考えうる最大値を出力せよ。

题目大意

给一个 11NN 的整数排列:p1,p2,,pNp_1,p_2,\ldots,p_N.

再给出 MM 对整数对 (x1,y1),(x2,y2),(xM,yM)(x_1,y_1),(x_2,y_2),\ldots (x_M,y_M) ,其中 i,1xi,yiN\forall i ,1\leqslant x_i,y_i\leqslant N.

每对整数对对应一个操作,第 ii 对整数对对应着操作:将排列中第 xix_i 个数和第 yiy_i 个数交换。

现在 AtCoDeer 希望通过执行任意次交换操作,使得 pi=ip_i=i 的数量尽可能多。求出按任意顺序执行任意次操作后,最多能使多少 pi=ip_i=i.

5 2
5 3 1 4 2
1 3
5 4
2
3 2
3 2 1
1 2
2 3
3
10 8
5 3 6 8 7 10 9 1 2 4
3 1
4 1
5 9
2 5
6 5
3 5
8 9
7 9
8
5 1
1 2 3 4 5
1 5
5

提示

制約

  • 2 2 < = <\ = N N < = <\ = 105 10^5
  • 1 1 < = <\ = M M < = <\ = 105 10^5
  • p p 1 1 から N N までの整数を並び替えた順列
  • 1 1 < = <\ = xj,yj x_j,y_j < = <\ = N N
  • xj x_j yj y_j
  • i i j j なら、 {xi,yi} \{x_i,y_i\} {xj,yj} \{x_j,y_j\}
  • 入力は全て整数

Sample Explanation 1

j=1 j=1 を選んで操作すると、 p p 1 3 5 4 2 となり、これがベストなので答えは 2 2 です。

Sample Explanation 2

例えば j=1 j=1 , j=2 j=2 , j=1 j=1 の順に操作すると、 p p 1 2 3 となり明らかにこれがベストです。 同じ j j を何回選んでもいいことに注意してください。

Sample Explanation 4

操作をする必要はありません。