108.冗余连接
并查集应用类题目,关键是如何把题意转化成并查集问题
代码随想录
import java.util.Scanner;
public class Main{
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
DisJoint disjoint = new DisJoint(n+1);
while(n-- > 0){
int a = scanner.nextInt();
int b = scanner.nextInt();
if(disjoint.isSame(a, b)){
System.out.println(a+" "+b);
break;
}else{
disjoint.join(a, b);
}
}
}
}
class DisJoint{
private int[] farther;
public DisJoint(int N){
farther = new int[N];
for(int i = 0; i < N; i++){
farther[i] = i;
}
}
public int find(int n){
if(n == farther[n]){
return n;
}else{
return farther[n] = find(farther[n]);
}
// return n == farther[n] ? n : (farther[n] = find(farther[n]));
}