文章目录
- [卡码网 107. 寻找存在的路线](#卡码网 107. 寻找存在的路线)
卡码网 107. 寻找存在的路线
并查集基础题目,并查集的四种方法,初始化,每一个节点初始化指向自己,join方法,把两个节点加入到同一个集合中,isame方法,判断两个节点是否在同一个集合中,find方法,找到每一个节点的根节点,使用路径压缩。
java
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
DisJoint disjoint = new DisJoint(N + 1);
for (int i = 0; i < M;i++) {
int s = sc.nextInt();
int t = sc.nextInt();
disjoint.join(s, t);
}
if (disjoint.isSame(sc.nextInt(), sc.nextInt())) {
System.out.println("1");
}
else {
System.out.println("0");
}
}
}
class DisJoint {
private int[] father;
public DisJoint(int N) {
father = new int[N];
for (int i = 0; i < N; i++) {
father[i] = i;
}
}
public int find (int n) {
return n == father[n] ? n : (father[n] = find(father[n]));
}
public boolean isSame(int n, int m) {
n = find(n);
m = find(m);
return n == m;
}
public void join(int n, int m) {
n = find(n);
m = find(m);
if (n == m) {
return;
}
father[n] = m;
}
}