做一次修改,会把所有的x变成y
    问要做多少次修改,才能保证两个数组中的数字是一样的

    1. package test.meituan;
    2. import java.util.Scanner;
    3. public class Main4 {
    4. static class UF {
    5. private int[] parent;
    6. public UF(int n) {
    7. parent = new int[n];
    8. for (int i = 0; i < n; i++) {
    9. parent[i] = i;
    10. }
    11. }
    12. public void union(int p, int q) {
    13. int rootP = find(p);
    14. int rootQ = find(q);
    15. if (rootP == rootQ)
    16. return;
    17. parent[rootP] = rootQ;
    18. }
    19. public boolean connected(int p, int q) {
    20. int rootP = find(p);
    21. int rootQ = find(q);
    22. return rootP == rootQ;
    23. }
    24. private int find(int x) {
    25. if (x != parent[x]) {
    26. int p = parent[x];
    27. parent[x] = find(p);
    28. }
    29. return parent[x];
    30. }
    31. }
    32. public static void main(String[] args) {
    33. Scanner in = new Scanner(System.in);
    34. int n = in.nextInt();
    35. int[] left = new int[n / 2];
    36. int[] right = new int[n / 2];
    37. for (int i = 0; i < n / 2; i++) {
    38. left[i] = in.nextInt();
    39. }
    40. for (int i = 0; i < n / 2; i++) {
    41. right[i] = in.nextInt();
    42. }
    43. UF uf = new UF(100000);
    44. long modify = 0;
    45. for (int i = 0; i < n / 2; i++) {
    46. if (!uf.connected(left[i], right[i])) {
    47. uf.union(left[i], right[i]);
    48. modify++;
    49. }
    50. }
    51. System.out.println(modify);
    52. }
    53. }