题目:
思路:此题运用并查集,链接:https://www.cnblogs.com/xzxl/p/7226557.html
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main{
static int[] pre;
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m=in.nextInt();
int n=in.nextInt();
int k=in.nextInt();
pre=new int[n*m+1];
for(int i=1;i<=m*n;i++) {
pre[i]=i;//初始化
}
for(int i=0;i<k;i++) {
int a=in.nextInt();
int b=in.nextInt();
union(a,b);
}
in.close();
Set<Integer> set=new HashSet<Integer>();
for(int i=1;i<=m*n;i++) {
set.add(find(i));
}
System.out.println(set.size());
}
public static int find(int x) {
int a=x;
//寻找根节点
while(pre[a]!=a)
a=pre[a];
//缩短路径
int b=x;
while(pre[b]!=a) {
int t=pre[b];
pre[b]=a;
b=t;
}
return a;
}
public static void union(int x,int y) {
int px=find(x);
int py=find(y);
if(px!=py) {
pre[px]=py;
}
}
}