有老码农操刀帮我整理资料,省掉了很多搜集资料时间,老码农继续努力哟。。。
今天下午先是看视频,然后看算法训练营的示例,看完示例,自然就要打一个板子。
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
vector<int> fa(10005); //先初始化一个大数组
int Find(int a) {
if (a != fa[a]) { //如果a的父节点不是本身,就往前找到其祖宗节点
fa[a] = Find(fa[a]); //往回返的时候把路上遍历过的所有节点更新为祖宗节点
}
return fa[a];
}
void Union(int x, int y) {
int a = Find(x);
int b = Find(y); //找到两个数的祖宗节点
if (a != b) {
fa[b] = a; //合并时只改其祖宗节点
}
}
void find_union(int x, int y) { //需要输出值时使用的,和上面原理一样
int a = Find(x);
int b = Find(y);
if (a == b) {
cout << "Y" << endl;
} else {
cout << "N" << endl;
}
}
void best_coder() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
fa[i] = i; //要记得现将每个节点的祖宗节点更新为本身
}
for (int i = 0; i < m; ++i) {
int a, b, c;
cin >> a >> b >> c;
if (a == 1) { //根据题目要求调用不同的函数就OK啦
Union(b, c);
} else {
find_union(b, c);
}
}
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
// 返回
return 0;
}
上面的初版代码一次AC,老码农看后显然很不满意,又拽给我几个示例代码,还美其名曰:让我写个漂亮的板子出来。
修改后的板子代码
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
struct UF {
vector<int> fa;
UF(int n) : {
fa(n) {}
}
void initialize (int n) {
for (int i = 1; i <= n; ++i) {
fa[i] = i; //要记得先将每个节点的祖宗节点更新为本身
}
}
int Find(int a) {
if (a != fa[a]) { //如果a的父节点不是本身,就往前找到其祖宗节点
fa[a] = Find(fa[a]); //往回返的时候把路上遍历过的所有节点更新为祖宗节点
}
return fa[a];
}
void Union(int x, int y) {
int a = Find(x);
int b = Find(y); //找到两个数的祖宗节点
if (a != b) {
fa[b] = a; //合并时只改其祖宗节点
}
}
bool is_same(int x, int y) { //判断两个数在不在一个集合里
return Find(x) == Find(y);
}
};
void best_coder() {
int n, m;
cin >> n >> m;
UF uf(n);
uf.initialize(n);
for (int i = 0; i < m; ++i) {
int a, b, c;
cin >> a >> b >> c;
if (a == 1) { //根据题目要求调用不同的函数就OK啦
uf.Union(b, c);
} else {
if (uf.is_same(b, c)) {
cout << "Y" << endl;
} else {
cout << "N" << endl;
}
}
}
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
// 返回
return 0;
}
欺负小孩没商量,写完模板题,老码农随手又拽给我8道题,美其名曰:要好好巩固所学知识。我有选择的权力吗????
下周又没好日子过了。