并查集理论基础
并查集理论基础很重要,明确并查集解决什么问题,代码如何写,对后面做并查集类题目很有帮助。
寻找存在的路径
并查集裸题,学会理论基础后,本题直接可以直接刷过
#include <iostream>
#include <vector>
using namespace std;
const int n = 1000;
vector<int>father(n, 0);
void init() {
for (int i = 0; i < n; i++) {
father[i] = i;
}
}
int find(int n) {
return father[n] == n ? n : father[n] = find(father[n]);
}
int isSame(int n, int v) {
n=find(n);
v=find(v);
return n == v;
}
void join(int n, int v) {
n=find(n);
v=find(v);
if (n == v)return;
father[v] = n;
}
void solve() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int a, b;
cin >> a >> b;
join(a, b);
}
int source, destination;
cin >> source >> destination;
cout << isSame(source, destination) << endl;
}
int main() {
init();
solve();
return 0;
}