【专题】并查集判断冲突

news2024/10/7 2:23:21

(1)题目

P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

(2)解决思路

先排序,把所有e==1的操作放在前面,然后再进行e==0的操作在进行e==1的操作的时候,我们只要把它约束的两个变量放在同一个集合里面即可。在e==0,即存在一条不相等的约束条件,对于它约束的两个变量,如果在一个集合里面,那就不可能满足!如不相等的约束条件都满足,那就YES。

(3)50分代码

#include<bits/stdc++.h>
#define maxn 100001
using namespace std;
int fa[maxn];
struct node{
	int x,y,z;
}a[maxn];
bool cmp(node a,node b){
	return a.z>b.z;
}
int Find(int x){
	return x==fa[x] ? x : fa[x]=Find(fa[x]);
}
int main(){
	int n,T;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		//初始化
		for(int i=1;i<=n;i++) fa[i]=i;
		memset(a,0,sizeof(a));
		//读入数据 
		for(int i=1;i<=n;i++){
			scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
		}
		sort(a+1,a+1+n,cmp);
		bool flag=0;
		for(int i=1;i<=n;i++){
			int fx=Find(a[i].x);
			int fy=Find(a[i].y);
			if(a[i].z==1){
				fa[fx]=fy;
			}else{
				if(fx==fy){
					printf("NO\n");
					flag=1;
					break;
				}
			}
		}
		if(!flag) printf("YES\n");		
	}
	return 0;
}

(4)问题

但是我们最后发现


                                               


t很大,fa数组根本存不下,但n可以存下呀,fa开了许多用不到的空间。

这是我们可以想到用离散化,fa我们不开数字大小,而是开够有多少数字即可

最后把数字离散化为它排第几就可以了

(5)离散化

		//读入数据 
		for(int i=1;i<=n;i++){
			scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
			book[++tot]=a[i].x;
			book[++tot]=a[i].y;
		}
		//离散化
		sort(book+1,book+1+tot);
		int reu=unique(book+1,book+tot+1)-book-1;
		//把a数组的数字大小改为数字排名 
		for(int i=1;i<=n;i++){
			a[i].x=lower_bound(book+1,book+1+reu,a[i].x)-book;
			a[i].y=lower_bound(book+1,book+1+reu,a[i].y)-book;
		}

(6)AC

#include<bits/stdc++.h>
#define maxn 1000001
using namespace std;
int fa[maxn<<1];
int book[maxn<<1];
struct node{
	int x,y,z;
}a[maxn];
bool cmp(node a,node b){
	return a.z>b.z;
}
int Find(int x){
	return x==fa[x] ? x : fa[x]=Find(fa[x]);
}
int main(){
	int n,T,tot;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		//初始化
		for(int i=1;i<=(n<<1);i++) fa[i]=i;
		memset(a,0,sizeof(a));
		memset(book,0,sizeof(book));
		tot=0;
		//读入数据 
		for(int i=1;i<=n;i++){
			scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
			book[++tot]=a[i].x;
			book[++tot]=a[i].y;
		}
		//离散化
		sort(book+1,book+1+tot);
		int reu=unique(book+1,book+tot+1)-book-1;
		//把a数组的数字大小改为数字排名 
		for(int i=1;i<=n;i++){
			a[i].x=lower_bound(book+1,book+1+reu,a[i].x)-book;
			a[i].y=lower_bound(book+1,book+1+reu,a[i].y)-book;
		}
		//并查集 
		sort(a+1,a+1+n,cmp);
		bool flag=0;
		for(int i=1;i<=n;i++){
			int fx=Find(a[i].x);
			int fy=Find(a[i].y);
			if(a[i].z==1){
				fa[fx]=fy;
			}else{
				if(fx==fy){
					printf("NO\n");
					flag=1;
					break;
				}
			}
		}
		if(!flag) printf("YES\n");		
	}
	return 0;
}

(7)提示

【1】

在离散化后fa和book数组要开n的二倍哦!

因为有x和y两个数据!数量规模都扩大了二倍

【2】

因为数组下标从1开始,函数调用要注意,该加1要加1,该减1要减1!


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

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

相关文章

笔试、面试总结(网络安全与渗透测试)

什么是同源策略&#xff1f; 为了防止不同域在用户浏览器中彼此干扰&#xff0c;浏览器对从不同来源&#xff08;域&#xff09;收到的内容进行隔离。浏览器不允许任何旧有脚本访问一个站点的 cookie&#xff0c;否则 &#xff0c;会话容易被劫持。只有发布 cookie 的站点能够…

用servlet实现一个简单的猜数字游戏。

需要两个页面&#xff0c;一个jsp页面&#xff08;guess.jsp&#xff09;和servlet页面&#xff08;servlet&#xff09;。 一.jsp页面 在jsp页面中需要实现&#xff1a; 1.创建随机数并且保存在session中。 2.做个form表单提交猜的数字给servlet页面。 <%page import&…

电提示找不到api-ms-win-crt-runtime-l1-1-0.dll怎么办,分享快速解决办法

如果在电脑中提示api-ms-win-crt-runtime-l1-1-0.dll找不到或丢失的情况&#xff0c;大家可以来看看这篇文章&#xff0c;能够快速解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题&#xff0c;一起来看看都有什么办法解决吧。 一&#xff0e;api-ms-win-crt-runtime-l1-1-0.d…

判断多个多边形是否连通(方法一:原理)

重点&#xff1a; 1.将多边形一个一个拎出来判断&#xff0c;以1为开始&#xff0c;后续如果连接&#xff0c;就加入序列&#xff0c;以2开始判断&#xff0c;以此为序。

Python 机器学习入门之逻辑回归

系列文章目录 第一章 Python 机器学习入门之线性回归 第一章 Python 机器学习入门之梯度下降法 第一章 Python 机器学习入门之牛顿法 第二章 Python 机器学习入门之逻辑回归 逻辑回归 系列文章目录前言一、逻辑回归简介二、逻辑回归推导1、问题2、Sigmoid函数3、目标函数3.1 让…

【C语言】对文件的输入输出

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C语言初步学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读1. 什么是文件1.1 程序文件1.2 数据文件1.3 数据流1.4 文件名 2. 文件的分类3. 文件缓冲区4. 文件的打开和关闭4.1 文…

IDEA插件推荐:TabColor

国庆假期&#xff0c;闲来无事&#xff0c;笔者自己开发了一个简易的IDEA插件。 TabColor 这是一个IDEA插件。通过改变核心Tab的颜色&#xff0c;将开发者从一堆Tab的迷茫中解放&#xff01; 安装 IDEA插件安装界面&#xff0c;搜索TabColor&#xff0c;进行安装。从浏览器下…

最详细STM32,cubeMX 点亮 led

这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 文章目录 前言一、开发环境搭建。二、LED 原理图解读三、什么是 GPIO四、cubeMX 配置工程五、解读 cubeMX 生成的代码六、延时函数七、控制引脚状态函数点亮 LED 八、GPIO 的工作模式九、为什么使用推挽输出驱动 LED总结…

云上攻防-云原生篇Docker安全权限环境检测容器逃逸特权模式危险挂载

文章目录 前言1、Docker是干嘛的&#xff1f;2、Docker对于渗透测试影响&#xff1f;3、Docker渗透测试点有那些&#xff1f;4、前渗透-判断在Docker中方式一&#xff1a;查询cgroup信息方式二&#xff1a;检查/.dockerenv文件方式三&#xff1a;检查mount信息方式四&#xff1…

NSDT编辑器实现数字孪生

数字孪生的强大功能来自于将真实世界的资产与真实世界的数据联系起来&#xff0c;因此您可以更好地可视化它们。数字孪生使跨职能团队能够以交互式和沉浸式方式协作设计、构建、测试、部署和操作复杂系统。 如何创建数字孪生&#xff1f; 数字孪生是通过导入概念模型&#xf…

C++学习——对象的内存模型

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 对象被创建时会在栈区或者堆区分配内存。我们直观的认识是&#xff0c;如果创建了 10 个对象&#xff0c;就要分别为这 10 个对象的成员变量和成员函数分配内存&#xff0c;如下图所示…

Realm violation Datapatch 禁用DBV database vault

Datapatch failed with the error ORA-47410: Realm violation for CREATE ROLE (Doc ID 2306010.1)​编辑To Bottom APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.0.2 and later Oracle Database Cloud Schema Service - Version N/A and later Oracle…

使用LLM在KG上进行复杂的逻辑推理10.12+10.13

使用LLM在KG上进行复杂的逻辑推理 摘要介绍相关工作方法问题格式化邻域检索和逻辑链分解链状推理提示实施细节 摘要 在知识图谱上进行推理是一项具有挑战性的任务&#xff0c;这需要深度理解实体之间复杂的关系和它们关系的逻辑。而当前的方法通常依赖于学习 几何形状 以将实体…

5+非肿瘤分析,分型+WGCNA+机器学习筛选相关基因

今天给同学们分享一篇非肿瘤分型机器学习WGCNA实验的生信文章“Identification of diagnostic markers related to oxidative stress and inflammatory response in diabetic kidney disease by machine learning algorithms: Evidence from human transcriptomic data and mou…

C# U2Net Portrait 跨界肖像画

效果 项目 下载 可执行文件exe下载 源码下载

【环境】Ubuntu20.04 安装 Anaconda 顺顺利利

ubuntu里面安装的Anaconda也是顺顺利利 别忘了source source一下 参考链接 中间遇到了一个问题&#xff0c;用下面的链接轻松解决了 关于修改anaconda安装路径的问题

RT-Thread MQTT(学习)

MQTT背景应用 MQTT是机器对机器&#xff08;M2M&#xff09;/物联网&#xff08;IoT&#xff09;连接协议&#xff0c;英文全名为“Message Queuing Telemetry Transport”&#xff0c;“消息队列遥测传输”协议。它是专为受限设备和低带宽、高延迟或不可靠的网络而设计的&…

基于SpringBoot的社区团购系统

基于SpringBoot的社区团购系统的设计与实现 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;用户、管理员管理员&#xff1a;登录、个人中心、用户管理、…

【aloam】ubuntu20.04 配置 aloam 环境,编译过程报错及成功解决方法

为什么写这篇博客 ALOAM是slamer的必经之路&#xff0c;official提供的基础环境推荐ubuntu16.04或者18.04&#xff0c;而我用20.04已经有一段时间了&#xff0c;不方便换&#xff0c;但由于其他原因也不得不去配置。过程中出现了几个问题&#xff0c;在这里也就20分钟&#xf…

【网安专题10.11】软件安全+安全代码大模型

软件安全安全代码大模型 写在最前面一些启发科研方法科研思路 课程考察要求软件供应链安全漏洞复制1、代码克隆2、组件依赖分析 关键组件安全不足&#xff0c;漏洞指数级放大供应链投毒内部攻击源代码攻击分发、下载网站攻击更新、补丁网站攻击 形成技术壁垒&#xff08;找方向…