刷题笔记32——STL::map实现并查集、岛问题

本文详细介绍了如何使用STL::map实现并查集,并结合岛问题进行实例解析。首先展示了STL::map实现并查集的测试结果和代码,接着分析了岛问题的两种解法,包括单CPU单内存解法和利用并查集的多任务计算解法,最后探讨了更多并查集问题的应用。
摘要由CSDN通过智能技术生成

一、STL::map实现并查集

测试结果

在这里插入图片描述

代码

实现思路见 此处——并查集

#include <iostream>
#include <map>
#include <stack>
#include <vector>
using namespace std;

struct Node {
   
	int _i;		// whatever type u want
	Node(int x) : _i(x) {
    }
	Node() : _i(0) {
    }
	friend bool operator!=(const Node &a, const Node &b) {
    return (a._i != b._i); }
	friend bool operator==(const Node &a, const Node &b) {
    return (a._i == b._i); }
	friend bool operator<(const Node &a, const Node &b) {
    return (a._i < b._i); }
};

class UnionFindSet {
   
public:
	UnionFindSet(const vector<Node> &Nodes) {
   
		makeSet(Nodes);	// 注意:不应有重复的node
	}

	bool isInSameSet(const Node &a, const Node &b) {
   
		return (findRootUnRecur(a) == findRootUnRecur(b));
	}

	void Union(const Node &a, const Node &b) {
   
		Node rootA = findRootUnRecur(a);
		Node rootB = findRootUnRecur(b);
		if (rootA != rootB) {
   
			int sizeA = sizeMap[rootA];
			int sizeB = sizeMap[rootB];
			if (sizeA <= sizeB) {
   
				fatherMap[rootA] = rootB;
				sizeMap[rootB] = (sizeA + sizeB);
			}
			else {
   
				fatherMap[rootB] = rootA;
				s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值