记录编号 |
600089 |
评测结果 |
AAAAAAAAAAAA |
题目名称 |
亲戚 |
最终得分 |
100 |
用户昵称 |
LikableP |
是否通过 |
通过 |
代码语言 |
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;
}