本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、并查集
二、题目
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] strArr = str.split(" ");
int n = Integer.parseInt(strArr[0]);
int m = Integer.parseInt(strArr[1]);
int p = Integer.parseInt(strArr[2]);
DisJointSet djs = new DisJointSet();
djs.init(n);
for (int i = 0; i < m; i++) {
String str1 = sc.nextLine();
String[] strArr1 = str1.split(" ");
int x = Integer.parseInt(strArr1[0]);
int y = Integer.parseInt(strArr1[1]);
djs.merge(x,y);
}
for (int i = 0; i < p; i++) {
String str2 = sc.nextLine();
String[] strArr2 = str2.split(" ");
int x = Integer.parseInt(strArr2[0]);
int y = Integer.parseInt(strArr2[1]);
int res1 = djs.find(x);
int res2 = djs.find(y);
if (res1 == res2) {
System.out.println("Yes");
}else {
System.out.println("No");
}
}
}
}
class DisJointSet{
int[] parent;
int[] rank;
public void init(int n) {
parent = new int[n + 1];
rank = new int[n + 1];
for (int i = 1; i <= n; i++) {
parent[i] = i;
rank[i] = 1;
}
}
public int find(int x) {
if (x == parent[x]) {
return x;
}else {
parent[x] = find(parent[x]);
return parent[x];
}
}
public void merge(int x, int y) {
int rx = find(x);
int ry = find(y);
if (rx != ry) {
if (rank[rx] < rank[ry]) {
swap(rx,ry);
}
parent[ry] = rx;
if (rank[rx] == rank[ry]) {
rank[rx]++;
}
}
}
public void swap(int x, int y) {
int temp = x;
x = y;
y = temp;
}
}