这是一道并查集模板题
import java.util.Scanner;
//并查集模板
class unionfind {
int[] parent;
int[] size;
int count;
public unionfind(int n) {
parent = new int[n];
size = new int[n];
count = n;
for (int i = 0; i < n; i++) {
parent[i] = i;
size[i] = 1;
}
}
public int root(int x) {
while (x != parent[x]) {
parent[x] = parent[parent[x]];
x = parent[x];
}
return x;
}
public void union(int x, int y) {
int rootX = root(x);
int rootY = root(y);
if (rootX == rootY)
return;
if (size[rootX] < size[rootY]) {
parent[rootX] = rootY;
size[rootY] += size[rootX];
} else {
parent[rootY] = rootX;
size[rootX] += size[rootY];
}
count--;
}
}
public class Main{
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int m = s.nextInt();
int n = s.nextInt();
int num = s.nextInt();
unionfind uf = new unionfind(m * n);
for (int i = 0; i < num; i++) {
int num1 = s.nextInt();
int num2 = s.nextInt();
uf.union(num1 - 1, num2 - 1);
}
System.out.println(uf.count);
}
}