本文主要是介绍【NC23803】DongDong认亲戚,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
DongDong认亲戚
并查集
思路
并查集模板题,不过这道题的并查集使用到的不是抽象的数组,而是字符串,如果要以字符串为键的话,则需要用到哈希映射。
代码
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;class UnionFind {unordered_map<string, string> fa;public:UnionFind(const vector<string>& names) {for (auto&& name : names) {fa[name] = name;}}~UnionFind() {}string find(string x) {string r = x;while (r != fa[r]) {r = fa[r];}string i = x, j;while (i != r) {j = fa[i];fa[i] = r;i = j;}return r;}void uni(string x, string y) {x = find(x);y = find(y);if (x != y) {fa[x] = y;}}
};int main(void) {ios::sync_with_stdio(false);cin.tie(nullptr);int n = 0, m = 0, i = 0, a = 0;cin >> n >> m;vector<string> names(n);for (i = 0; i < n; i++) {cin >> names[i];}UnionFind u(names);string name, na;while (m--) {cin >> a >> name >> na;if (a == 1) {// 并u.uni(name, na);} else if (a == 2) {// 查name = u.find(name);na = u.find(na);cout << (name == na) << endl;}}return 0;
}
这篇关于【NC23803】DongDong认亲戚的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!