tj
2024-08-31 23:35:22
发布于:广东
15阅读
0回复
0点赞
#include <iostream>
using namespace std;
const int maxn = 5e3 + 9;
int fa[maxn]; // 存父节点
// 传入编号为x的节点
int get(int x) {
if (fa[x] == x) {
return x; // 自己就是自己
}
return fa[x] = get(fa[x]); // 路径压缩
}
void merge(int x, int y) { // x,y不认识的节点合并
fa[get(x)] = get(y); // 合并集合
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m, p;
cin >> n >> m >> p;
for (int i = 1; i <= n; i++) fa[i] = i; // 自己就是自己
for (int i = 1; i <= m; i++) {
int u, v;
cin >> u >> v; // 建造顶点u,v
if (get(u) != get(v)) { // u,v彼此不认识
merge(u, v); // 两个人认识了,u认识v,v也认识u
}
}
// 进行p次询问
while (p--) {
int x, y;
cin >> x >> y;
// get(x): 返回的是x所在集合中的代表
// get(y): 返回的是y所在集合中的代表
if (get(x) == get(y)) cout << "Yes\n";
else cout << "No\n";
}
return 0;
}
这里空空如也
有帮助,赞一个