Submission #3403448


Source Code Expand

import java.util.*;

public class Main {
	public static void main(String args[]) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		int p[] = new int[N];
		for(int i = 0; i < N; i++) {
			p[i] = sc.nextInt();
		}
		int x[] = new int[M];
		int y[] = new int[M];
		for(int  i = 0; i < M; i++) {
			x[i] = sc.nextInt();
			y[i] = sc.nextInt();
		}
		
		UnionFind.init(N);
		for(int i = 0; i < M; i++) {
			UnionFind.unite(x[i] - 1, y[i] - 1);
		}
		
		int cnt = 0;
		for(int i = 0; i < N; i++) {
			if(UnionFind.same(p[i] - 1, i)) {
				cnt++;
			}
		}
		
		System.out.println(cnt);
	}
}

class UnionFind {
	static int N;
	static int par[];
	static int rank[];
	public static void init(int n) {
		N = n;
		par = new int[N];
		rank = new int[N];
		for(int i = 0; i < N; i++) {
			par[i] = i;
			rank[i] = 0;
		}
	}

	public static int find(int x) {
		if(par[x] == x) {
			return x;
		} else {
			return par[x] = find(par[x]);
		}
	}
	
	public static void unite(int x, int y) {
		x = find(x);
		y = find(y);
		if(x == y) return;
		
		if(rank[x] < rank[y]) {
			par[x] = y;
		} else {
			par[y] = x;
			if(rank[x] == rank[y]) rank[x]++;
		}
	}
	
	public static boolean same(int x, int y) {
		return find(x) == find(y);
	}
}

Submission Info

Submission Time
Task D - Equals
User YK0809
Language Java8 (OpenJDK 1.8.0)
Score 400
Code Size 1331 Byte
Status AC
Exec Time 613 ms
Memory 90236 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 4
AC × 23
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 0_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt
Case Name Status Exec Time Memory
0_000.txt AC 92 ms 18640 KB
0_001.txt AC 93 ms 22996 KB
0_002.txt AC 93 ms 18640 KB
0_003.txt AC 91 ms 20820 KB
1_004.txt AC 501 ms 61372 KB
1_005.txt AC 602 ms 90236 KB
1_006.txt AC 613 ms 86552 KB
1_007.txt AC 92 ms 19156 KB
1_008.txt AC 93 ms 20948 KB
1_009.txt AC 90 ms 18900 KB
1_010.txt AC 92 ms 19796 KB
1_011.txt AC 99 ms 20052 KB
1_012.txt AC 115 ms 19924 KB
1_013.txt AC 134 ms 21840 KB
1_014.txt AC 183 ms 30072 KB
1_015.txt AC 119 ms 22612 KB
1_016.txt AC 120 ms 22228 KB
1_017.txt AC 152 ms 24020 KB
1_018.txt AC 497 ms 61316 KB
1_019.txt AC 403 ms 48812 KB
1_020.txt AC 417 ms 52624 KB
1_021.txt AC 433 ms 46512 KB
1_022.txt AC 605 ms 90144 KB