5
样例说明 其合根情况参考下图-------------------------------------
简单的并查集,直接上代码
import java.util.HashSet; import java.util.Scanner; import java.util.Set; class Main{ static int []head; public static void main(String[] args) { //并查集 Scanner s=new Scanner(System.in); int m=s.nextInt(); int n=s.nextInt(); int k=s.nextInt(); head=new int [m*n]; for(int i=0;i<m*n;i++) head[i]=i; int a,b; for(int i=0;i<k;i++) { a=s.nextInt()-1; b=s.nextInt()-1; u(a,b); } Set<Integer> set=new HashSet<Integer>(); for(int i=0;i<m*n;i++) { set.add(f(i)); } System.out.println(set.size()); } private static void u(int a, int b) { if(f(a)==f(b)) return; head[f(a)]=f(b); } private static int f(int i) { if(head[i]==i) return i; return head[i]=f(head[i]); } }