🤠 亲戚
🤠 合并并查集a,b:p[ find(a) ] = find(b)
import java.util.*;
import java.io.*;
public class Main
{
static int N = 20010;
static int[] p = new int[N];
// 返回 x 的根节点(祖先)
static int find(int x)
{
if (p[x] != x)
{
p[x] = find(p[x]);
}
return p[x];
}
public static void main(String[] args) throws IOException
{
// Scanner sc = new Scanner(System.in);
// StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
// PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(System.out));
// st.nextToken();
// int n = (int) st.nval;
// st.nextToken();
// int m = (int) st.nval;
String s[] = in.readLine().split(" ");
int n = Integer.parseInt(s[0]);
int m = Integer.parseInt(s[1]);
for (int i = 1; i <= n; i++)
p[i] = i;
for (int i = 0; i < m; i++)
{
// st.nextToken();
// int a = (int) st.nval;
// st.nextToken();
// int b = (int) st.nval;
s = in.readLine().split(" ");
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
// 合并并查集,a的根节点的父节点赋值为 b
p[find(a)] = find(b);
}
// st.nextToken();
// int q = (int) st.nval;
s = in.readLine().split(" ");
int q = Integer.parseInt(s[0]);
for (int i = 0; i < q; i++)
{
// st.nextToken();
// int a = (int) st.nval;
// st.nextToken();
// int b = (int) st.nval;
s = in.readLine().split(" ");
int a = Integer.parseInt(s[0]);
int b = Integer.parseInt(s[1]);
String res = find(a) == find(b) ? "Yes" : "No";
out.write(res + "\n");
}
out.flush();
}
}