《洛谷深入浅出进阶篇》P1995 程序自动分析——并查集,离散化

上链接:P1955 [NOI2015] 程序自动分析 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1955

上题干:

首先给你一个整数t,代表t次操作。

每一次操作包含以下内容:

1.给你一个整数n,让你执行n次条件

接下来n行,每行给你3个整数i,j,k,

例如 1 2 1

或  1 2 0

(前面两个数代表下标,第三个整数k代表条件,如果它是1 ,则代表 x1 = x2,如果它是0,代表x1!=x2) 

然后我们每一次操作需要输出yes 或 no 来表示这n个条件是否全部成立。

(假如给出这样的数据:

    n=4

    1 2 1

    2 3 1

    1 4 1

    3 4 0

    第一个条件到第四个条件分别是 x1=x2,x2=x3,x1=x4 ,x3!=x4

由于前面三个条件我们可以得知  x1=x2=x3=x4   所以与x3!=x4矛盾,输出no)

数据 n<=1e6, i,j<=1e9

很显然,这道题的条件和数据范围告诉我们:需要用到并查集+(离散化 or hash表)

第一,并差集的特点就是能将不同的集合连接到一起,然后便于我们查询某两个元素是否为同一集合。

第二,这道题的数据范围太大了,i能达到ie9,所以我们直接用并查集的话,毫无疑问,数组装不下。所以我们可以用离散化来大大缩小数据范围,除此之外呢,我们还可以用hash表来处理这样的大数据,使得每一个大数据都有一个特别的标记与之对应。

这两种方法都满足我们的需求,这里主要用离散化来实现代码。

还记得离散化的具体步骤吗?

记录散点,排序,去重,二分查找

并查集的具体步骤呢?

初始化集合,建立查询函数,合并函数。

所以我们的思路是这样的:

1,先将每一次的散点都存入一个数组b中

2,对这个数组b进行排序

3,对这个数组进行去重(可以选择重新建立一个数组c来存放去重后的数据,也可以直接用unique函数。)

4,二分查找每一对散点的相对位置。

5,初始化并查集

6,如果第三个数字k=1,我们就利用并查集来合并两个集合。

7,如果第三个数字k=0,我们就查询两个数是否为同一集合,如果是同一集合,那么我们有

上代码:


const int MAXN = 1e6 + 10;
struct st {
	int x, y, z;
};
st a[MAXN];//三组输入数据存放之处
int b[2 * MAXN];// 存入散点
int c[2 * MAXN];//排序数组
int fa[2 * MAXN];//并查集
int btop, ctop;

int find1(int x)
{
	if (x == fa[x])return fa[x];
	return fa[x] = find1(fa[x]);
}
void join1(int c1, int c2)
{
	int f1 = find1(c1), f2 = find1(c2);
	if (f1 != f2)fa[f1] = f2;
}
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		btop = 0;
		ctop = 0;
		int n;
		cin >> n;
		for (int i = 1; i <= n; i++)
		{
			cin >> a[i].x >> a[i].y >> a[i].z;
			b[++btop] = a[i].x;
			b[++btop] = a[i].y;
		}
		sort(b + 1, b + 1 + btop);
		for (int i = 1; i <= btop; i++)if (i == 1 or b[i] != b[i - 1])c[++ctop] = b[i];
		for (int i = 1; i <= n; i++)
		{
			a[i].x = lower_bound(c + 1, c + 1 + ctop, a[i].x) - c;
			a[i].y = lower_bound(c + 1, c + 1 + ctop, a[i].y) - c;
		}
		for (int i = 1; i <= ctop; i++)
		{
			fa[i] = i;
		}
		for (int i = 1; i <= n; i++)
		{
			if(a[i].z)
			join1(a[i].x, a[i].y);
		}
		bool fk = 1;
		for (int i = 1; i <= n; i++)
		{
			if (a[i].z==0)
			{
				if (find1(a[i].x) == find1(a[i].y))
					fk = 0;
			}
		}
		if (fk == 0)cout << "NO" << endl;
		else cout << "YES" << endl;
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

挖掘PostgreSQL事务的“中间态”----更加严谨的数据一致性?

1.问题 今天在上班途中&#xff0c;中心的妹纸突然找我&#xff0c;非常温柔的找我帮忙看个数据库的报错。当然以我的性格&#xff0c;妹子找我的事情对我来说优先级肯定是最高的&#xff0c;所以立马放下手中的“小事”&#xff0c;转身向妹子走去。具体是一个什么样的问题呢…

这才是 SpringBoot 统一登录鉴权、异常处理、数据格式的正确打开姿势

本篇将要学习 Spring Boot 统一功能处理模块&#xff0c;这也是 AOP 的实战环节 用户登录权限的校验实现接口 HandlerInterceptor WebMvcConfigurer 异常处理使用注解 RestControllerAdvice ExceptionHandler 数据格式返回使用注解 ControllerAdvice 并且实现接口 Response…

阿尔法狗的算法解析-增强学习和蒙特卡洛树搜索算法

阿尔法狗(AlphaGo)是谷歌旗下DeepMind开发的一个著名的增强学习算法,它在围棋领域取得了显著的成就。本文主要探讨其中两个重要的算法:增强学习算法和蒙特卡洛树搜索算法。 AlphaGo涉及的算法 AlphaGo是DeepMind团队开发的一个由多种算法和技术组合而成的系统,其包括以下…

【Linux网络】典型NAS存储方式:NFS网络共享存储服务

一、关于存储的分类 二、NFS的介绍 nfs的相关介绍&#xff1a; 1、原理 2、nfs的特点 3、nfs软件学习 4、共享配置文件的书写格式 关于权限&#xff0c;学习&#xff1a; 5、关于命令的学习&#xff1a; 三、实验操作 1、nfs默认共享权限&#xff08;服务端设置&#…

大数据-之LibrA数据库系统告警处理(ALM-12049 网络读吞吐率超过阈值)

告警解释 系统每30秒周期性检测网络读吞吐率&#xff0c;并把实际吞吐率和阈值&#xff08;系统默认阈值80%&#xff09;进行比较&#xff0c;当检测到网络读吞吐率连续多次&#xff08;默认值为5&#xff09;超过阈值时产生该告警。 用户可通过“系统设置 > 阈值配置 >…

【数据结构】C语言实现栈

&#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;C/C领域新星创作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;数据结构与算法&#x1f91d;希望作者的文章能对你有所帮助&#xff0c;有不足的地方请在评论区留言指正&#xff0c;大家…

软件开发和软件测试,到底学哪个好呢?

写在前面&#xff1a;买车没有最好&#xff0c;只有最适合。 类似这类“很难选择”的问题&#xff0c;在知乎上其实有很多。 比如&#xff1a;“该去年薪10w的国家电网&#xff0c;还是去年薪40w的互联网大厂”&#xff1b; 比如&#xff1a;“城里有房&#xff0c;剩下的100…

Sentinel规则

一、服务熔断测试 例子: application.properties配置文件 server.port8083spring.application.nameorder#spring.cloud.nacos.discovery.server-addrhttp://192.168.44.64:80spring.cloud.nacos.discovery.server-addrlocalhost:8848spring.cloud.sentinel.transport.port999…

C++之map和set模拟实现

前言 在map和set的使用文章中提到了CSTL中的map和set的底层其实就是用的红黑树来实现的,所以可以用红黑树来简单模拟实现一下STL中的map和set. STL源码中map和set的实现 map: 我们看到它的底层这个成员变量其实就是一棵红黑树, 之前说过map其实就对应搜索树的KV模型&#x…

面向企业的人脸属性检测技术方案

人脸识别技术已经成为企业提升服务质量、优化用户体验的重要工具。美摄科技&#xff0c;作为领先的人工智能技术提供商&#xff0c;我们致力于为企业提供最先进、最全面的人脸属性检测技术解决方案。 我们的AI人脸检测与属性分析技术&#xff0c;能够快速准确地检测人脸并返回…

安全狗云安全体系为高校提升立体化纵深防御能力

客户情况 某高校有服务器500台&#xff0c;对外站点200个&#xff0c;核心交换流量20G。 客户痛点 校园网系统分类较多&#xff0c;并且每类网站中安全级重要程度又各不相同&#xff0c;同时有多个网络出口(如&#xff1a;教育网、电信网、移动网等)&#xff0c;二级学院存在…

物联网网关在工业行业的应用案例

物联网网关在工业行业的应用案例 随着物联网技术的不断发展&#xff0c;物联网网关在工业行业的应用越来越广泛。本文将介绍一个物联网网关在工业行业的应用案例&#xff0c;以期为相关领域的研究和实践提供借鉴和启示。 一、案例背景 某大型制造企业是一家全球知名的汽车制…

vscode中git拉取、提交代码、解决冲突,以及合并代码的操作

vscode中git拉取、提交代码、解决冲突&#xff0c;以及合并代码的操作 场景&#xff1a;本地有修改代码&#xff0c;远程仓库没有更新&#xff0c;这时本地想要提交代码。 步骤&#xff1a;本地修改了testA文件内容->本地先暂存提交->拉取->推送&#xff1b; 本地修改…

2023.11.14 hivesql的容器,数组与映射

目录 https://blog.csdn.net/m0_49956154/article/details/134365327?spm1001.2014.3001.5501https://blog.csdn.net/m0_49956154/article/details/134365327?spm1001.2014.3001.5501 8.hive的复杂类型 9.array类型: 又叫数组类型,存储同类型的单数据的集合 10.struct类型…

SpringNative遇到的问题

问题1 org.apache.catalina.LifecycleException: An invalid Lifecycle transition was attempted ([before_stop]) for component 用不了反射&#xff0c;所以需要这个文件去 package org.wxy.example.sqlite.config;import java.lang.reflect.Constructor; import java.lan…

【机器学习基础】多元线性回归(适合初学者的保姆级文章)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…

BI智能财务分析真的神,财务人都来用

不用等&#xff0c;真的不用等&#xff01;这边接入数据&#xff0c;那边就能把利润表、资产负债表、现金流量表等财务数据分析报表送到眼前&#xff0c;不用开发&#xff0c;直接就看分析结果。 奥威BI财务方案真能把我要的指标、分析都做出来&#xff1f; 能&#xff0c;可…

在win10环境下安装python,配置python环境,执行python脚本

1.安装python 去python官网下载&#xff1a; https://www.python.org/ 这里采用 Python 3.10.8 版本 选择windows 64位 双击安装&#xff1a; 安装这里有两个选项&#xff1a; 1.默认安装直接选Install Now 2.勾选install launcher for all users&#xff08;recommend&a…

Github小彩蛋显示自己的README,git 个人首页的 README,readme基本语法

先上效果&#x1f447; 代码在下面&#xff0c;流程我放最下面了&#xff0c;思路就是创建一个和自己同名的仓库&#xff0c;要公开&#xff0c;创建的时候会提示小彩蛋你的reademe会展示在你的首页&#xff0c;或许你在这个readme里面的修改都会在你的主页上看到了&#x1f44…

TEMU平台要求电子产品提供的UL测试报告如何办理?

平台销售的电子产品&#xff0c;要符合指定的标准&#xff0c;如果不合格很容易发生起火&#xff0c;等危及消费者生命财产的安全&#xff0c;因此很多客户因为缺少UL报告&#xff0c;导致产品被下架。 带电的产品上架亚马逊或相关的跨境电商平台都需要相关的UL报告/UL标准&…
最新文章