题目描述
在某个城市中住着n个人,现在给定关于这n个人的m条信息(即某2个人认识)。
假设所有认识的人一定属于同一个单位,请计算该城市有多少个单位?
输入
第1行的第1个值表示总人数n,第2个值表示总信息数m;第2行开始为具体的认识关系信息
输出
单位的个数
样例输入 Copy
10 4
2 3
4 5
4 8
5 8
样例输出 Copy
7
package book;
import java.util.Scanner;
/*
* 并查集
*/
public class Uoion {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//n个人
int m=sc.nextInt();//m条信息
int father[]=new int[n];
int count=0;
int pre[]=new int[n];
for(int i=0;i<n;i++) {
father[i]=Integer.MAX_VALUE;
pre[i]=i;
}
for(int i=0;i<m;i++) {
int dad=sc.nextInt();
int child=sc.nextInt();
pre[child]=dad;
}
for(int i=0;i<n;i++) {
boolean fa=true;
int re=slove(i,pre);
for(int j=0;j<n;j++) {
if(re==father[j]) {
fa=false;
}
}
if(fa) {
father[i]=re;
}
}
for(int i=0;i<n;i++) {
if(father[i]!=Integer.MAX_VALUE) {
count++;
}
}
System.out.println(count);
}
private static int slove(int i, int[] pre) {
if(i==pre[i]) {
return pre[i];
}
else{
return slove(pre[i],pre);
}
}
}