扩展域并查集

news2025/3/25 11:51:51

什么叫扩展域并查集

 1 和 2是敌人,那么就把1好12链接起来:表示1和2是敌人

2和11链接起来也是这个道理

然后2 和3使敌人同理。

最后12连接了1 和 3,表名1 和 3 是 2 的敌人,1和3 就是朋友

1.P1892 [BalticOI 2003] 团伙 - 洛谷

 

#include<iostream>

using namespace std;

const int N = 1010;
int f[N * 2];
int n, m;

int find(int x)
{
	if (f[x] == x)return x;
	return f[x] = find(f[x]);
}
void un(int x, int y)
{
	f[find(y)] = find(x);
}

int main()
{
	cin >> n >> m;//n个人,m个关系
	for (int i = 1; i <= n * 2; i++)f[i] = i;//并查集和扩域并查集都要初始化

	while (m--)
	{
		//关系,人,人
		char opt; int p, q; cin >> opt >> p >> q;
		if (opt == 'E')//敌人
		{
			//把后一个人的敌人域的父亲指定为前一个人的父亲,当该敌人域再次和前面一个数进行un时,就会把上一次指定的父亲的父亲指定为当前数,实现敌人的敌人朋友化,如果不懂可以自己画一遍
			un(p, q + n);
			un(q, p + n);
		}
		else if (opt == 'F')//朋友
		{
			un(p, q);
			//如果是朋友的话,就把它两个连接起来
		}
	}
	int ret = 0;
	for (int i = 1; i <= n; i++)
	{
		if (f[i] == i)ret++;
	}
	cout << ret << endl;
}

 2.记录详情 - 洛谷 | 计算机科学教育新生态

 

//3种关系->扩展域并查集
#include<iostream>

using namespace std;

const int N = 5e4 + 10;
int f[N * 3];
int n;//序号范围
int m;//几种说法

//并查集实现
int find(int x)
{
	return (f[x] == x) ? x : f[x] = find(f[x]);
}
void un(int x, int y)
{
	f[find(y)] = find(x);
}
int main()
{
	cin >> n >> m;
	int ret = 0;
	//进行初始化,并查集初始化
	for (int i = 1; i <= n * 3; i++)f[i] = i;
	while (m--)
	{
		int op, x, y;
		cin >> op >> x >> y;
		//超过范围了
		if (x > n || y > n)
		{
			ret++;
			continue;
		}
		//当op = 1
		if (op == 1)//两者是同类
		{
			//两者不是同类的情况:x->y || y -> x
			if (find(x) == find(y + 2 * n) || find(x) == find(y + n))
			{
				ret++;
				continue;
			}
			//两者是同类,进行维护
			un(x, y);
			un(x + n, y + n);
			un(x + 2 * n, y + 2 * n);
		}
		else if (op == 2)//x->y
		{
			//两者不是x->y   是y->x||x == y
			if (find(x) == find(y) || find(x) == find(y + n))
			{
				ret++;
				continue;
			}
			//维护信息
			un(x, y + 2 * n);
			un(x + n, y);
			un(x + 2 * n, y + n);
		}
	}
	cout << ret << endl;
	return 0;
}

一定要记得实现并查集的初始化

思想:根据关系,可以划分多个f[n*num],num:表示关系的种类

该题中一共有,同类,捕食,被捕食,三种关系,

扩展域并查集的核心就是找到谁和谁合并在一起。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2320306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C#语言】C#同步与异步编程深度解析:让程序学会“一心多用“

文章目录 ⭐前言⭐一、同步编程&#xff1a;单线程的线性世界&#x1f31f;1、寻找合适的对象✨1) &#x1f31f;7、设计应支持变化 ⭐二、异步编程&#xff1a;多任务的协奏曲⭐三、async/await工作原理揭秘⭐四、最佳实践与性能陷阱⭐五、异步编程适用场景⭐六、性能对比实测…

动态规划入门详解

动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种算法思想&#xff0c;它将问题分解为更小的子问题&#xff0c;然后将子问题的解存起来&#xff0c;避免重复计算。 所以动态规划中每一个状态都是由上一个状态推导出来的&#xff0c;这一点就区别…

SOFABoot-09-模块隔离

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概览 SOFABoot-01-蚂蚁金服开源的 s…

基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关

此方案充分挖掘eFish-SBC-RK3576的硬件潜力&#xff0c;可快速复制到智慧园区、交通枢纽等场景。 方案亮点 ‌接口高密度‌&#xff1a;单板集成5GWiFi多路工业接口&#xff0c;减少扩展复杂度。‌AIoT融合‌&#xff1a;边缘端完成传感器数据聚合与AI推理&#xff0c;降低云端…

CSS基础知识一览

持续维护 选择器 display 常用属性 浮动 弹性布局

【免费】2000-2019年各省地方财政房产税数据

2000-2019年各省地方财政房产税数据 1、时间&#xff1a;2000-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政房产税 4、范围&#xff1a;31省 5、指标说明&#xff1a;房产税是对个人和单位拥有的房产征收的一种…

车载以太网网络测试-21【传输层-DOIP协议-4】

目录 1 摘要2 DoIP entity status request/response&#xff08;0x4001、0x4002&#xff09;2.1 使用场景2.2 报文结构2.2.1 0x4001&#xff1a;DoIP entity status request2.2.2 0x4002&#xff1a;DoIP entity status response 3 Diagnostic power mode information request/…

Spring AI Alibaba ChatModel使用

一、对话模型&#xff08;Chat Model&#xff09;简介 1、对话模型&#xff08;Chat Model&#xff09; 对话模型&#xff08;Chat Model&#xff09;接收一系列消息&#xff08;Message&#xff09;作为输入&#xff0c;与模型 LLM 服务进行交互&#xff0c;并接收返回的聊天…

基于FPGA频率、幅度、相位可调的任意函数发生器(DDS)实现

基于FPGA实现频率、幅度、相位可调的DDS 1 摘要 直接数字合成器( DDS ) 是一种通过生成数字形式的时变信号并进行数模转换来产生模拟波形(通常为正弦波)的方法,它通过数字方式直接合成信号,而不是通过模拟信号生成技术。DDS主要被应用于信号生成、通信系统中的本振、函…

k8s高可用集群安装

一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …

3DMAX曲线生成器插件CurveGenerator使用方法

1. 脚本功能简介 3DMAX曲线生成器插件CurveGenerator是一个用于 3ds Max 的样条线生成工具&#xff0c;用户可以通过简单的UI界面输入参数&#xff0c;快速生成多条样条线。每条样条线的高度值随机生成&#xff0c;且可以自定义以下参数&#xff1a; 顶点数量&#xff1a;每条…

六十天前端强化训练之第二十六天之Vue Router 动态路由参数大师级详解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、知识讲解 1. Vue Router 核心概念 2. 动态路由参数原理 3. 参数传递方案对比 二、核心代码示例 1. 完整路由配置 2. 参数接收组件 3. 导航操作示例 三、实现效果示…

Model Context Protocol:下一代AI系统集成范式革命

在2023年全球AI工程化报告中,开发者面临的核心痛点排名前三的分别是:模型与业务系统集成复杂度(58%)、上下文管理碎片化(42%)、工具调用标准化缺失(37%)。传统API集成模式在对接大语言模型时暴露明显短板:RESTful接口无法承载动态上下文,GraphQL缺乏工具编排能力,gR…

Java多线程与高并发专题——Future 是什么?

引入 在上一篇Callable 和 Runnable 的不同&#xff1f;的最后&#xff0c;我们有提到和 Callable 配合的有一个 Future 类&#xff0c;通过 Future 可以了解任务执行情况&#xff0c;或者取消任务的执行&#xff0c;还可获取任务执行的结果&#xff0c;这些功能都是 Runnable…

DeepSeek本地搭建

1. 软件下载安装 Miniconda Miniconda下载地址 选择对应的版本下载&#xff0c;此处下载如下版本 Python 3.10 conda 25.1.1 安装完成后&#xff0c;配置环境变量&#xff0c;打开cmd命令窗口验证 Python Python的版本为 3.10 PyTorch PyTorch下载地址 后面通过命令下…

维普AIGC降重方法有哪些?

在学术写作和论文创作中&#xff0c;重复率过高是许多人面临的一大难题。随着科技的发展&#xff0c;维普 AIGC 为我们提供了一系列有效的降重方法。那么&#xff0c;维普AIGC降重方法有哪些呢&#xff1f;接下来就为大家详细介绍。 语义理解与改写 维普 AIGC 具备强大的语义理…

南京审计大学:《 面向工程审计行业的DeepSeek大模型应用指南》.pdf(免费下载)

大家好&#xff0c;我是吾鳴。 今天吾鳴要给大家分享的是由南京审计大学出品的《面向工程审计行业的DeepSeek大模型应用指南》&#xff0c;这份报告与《面向审计行业DeepSeek大模型操作指南》不同&#xff0c;这份报告更多的讲述DeepSeek怎么与工程审计行业结合&#xff0c;应该…

【前端】Canvas画布实现在线的唇膏换色功能

【前端】Canvas画布实现在线的唇膏换色功能 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 【前端】Canvas画布实现在线的唇膏换色功能背景概述以下是我们的实现方法!第一步 — 找…

arcgispro加载在线地图

World_Imagery (MapServer)https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer添加arcgis server WMTS 服务 by xdcxdc.at xdc的个人站点。博客请转至 http://i.xdc.at/ http://xdc.at/map/wmts 添加WMTS服务器

华为网路设备学习-16 虚拟路由器冗余协议(VRRP)

VRRP是针对干线上三层网络设备&#xff08;如&#xff1a;路由器、防火墙等&#xff09;的网络虚拟化技术&#xff0c;提供冗余和状态监测等功能。确保在网络中的单点故障发生时&#xff0c;能够快速切换到备份设备&#xff0c;从而保证网络通信的连续性和可靠性。‌ VRRP通过…