记录编号 600089 评测结果 AAAAAAAAAAAA
题目名称 亲戚 最终得分 100
用户昵称 GravatarLikableP 是否通过 通过
代码语言 C++ 运行时间 0.750 s
提交时间 2025-04-15 20:07:26 内存使用 3.92 MiB
显示代码纯文本
#include <iostream>
#include <fstream>
using namespace std;

const int MAXN = 2e4 + 10;
const int MAXM = 1e6 + 10;

struct EDGE{int to, next;}edge[2 * MAXM];

int edgeNum, head[MAXN];
void AddEdge(int from, int to){
	edgeNum++;
	edge[edgeNum].to = to;
	edge[edgeNum].next = head[from];
	head[from] = edgeNum;
};

int vis[MAXN];
int n, m, sign, q;

void dfs(int root, int sign){
	vis[root] = sign;
	for(int i = head[root]; i; i = edge[i].next){
		if(!vis[edge[i].to]){
			dfs(edge[i].to, sign);
		}
	}
}

int main(){
	freopen("relations.in", "r", stdin);
	freopen("relations.out", "w", stdout);
	cin >> n >> m;
	for(int i = 1; i <= m; i++){
		int x, y;
		cin >> x >> y;
		AddEdge(x, y), AddEdge(y, x);
	}

	for(int i = 1; i <= n; i++){
		if(!vis[i]){
			vis[i] = ++sign;
			dfs(i, sign);
		}
	}

	cin >> q;
	while(q--){
		int x, y;
		cin >> x >> y;
		if(vis[x] == vis[y]){
			cout << "Yes" << endl;
		}else{
			cout << "No" << endl;
		}
	}
	return 0;
}