P2024 [NOI2001] 食物链 带权并查集 循环关系

题目: 

P2024 [NOI2001] 食物链 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

本文学习自: 

题解 P2024 【食物链】 - RE: 从零开始的异世界信竞生活 - 洛谷博客 (luogu.com.cn) 

————

关系并查集其实就是在普通并查集的基础上额外开个数组re,用来表示每个点与其根节点的关系。

这个其实很好理解。设0为同类,1为该点吃根节点,2为根节点吃该点。 

难处理的就是合并,以及压缩并查集时,re关系数组如何处理。

只需理解这个图:

 

为什么有这个等式,其实这个等式左右两边表示的都是A与F2的关系 。(A到F2的两条路径和)

再结合关系是循环的(A吃B,B吃C,C吃D,那么A和D就是同类,构成循环了)。

然后就是注意,减法可能减负的,可以加个模数再取模。

代码: 

两个find,第一个是压缩时,循环处理re关系数组

第二个注释掉的是递归法,回溯的时候处理re关系数组

int fa[50005];
//带权并查集
int rela[50005];void init(int _size)
{for (int i = 0; i <= _size; i++)fa[i] = i;
}
int find(int aim)
{int cur = aim;int sum = 0;while (fa[aim] != aim){sum += rela[aim];//存aim = fa[aim];}while (fa[cur] != cur){int tmp = cur;cur = fa[cur];fa[tmp] = aim;sum -= rela[tmp];rela[tmp] = (sum+rela[tmp]) % 3;}return aim;
}
//int find(int aim)//从根往下更新
//{
//	int father = fa[aim];
//	if (fa[aim] == aim)
//		return aim;
//	fa[aim] = find(father);
//	rela[aim] = (rela[aim] + rela[father]) % 3;
//	return fa[aim];
//}
void join(int a, int b,int op)
{int oa = a, ob = b;a = find(a);b = find(b);fa[a] = b;rela[a] = (op + rela[ob] - rela[oa]+3)%3;//只处理祖先就好了,其余在压缩的时候处理//并查集就是合并根
}void solve()
{int n, k;cin >> n >> k;init(n);int op, a, b;int ans = 0;for (int i = 1; i <= k; i++){cin >> op >> a >> b;if (a > n || b > n){ans++;continue;}if (op == 1){if (find(a) == find(b)){if(rela[a] != rela[b])ans++;			}else{join(a, b,0);}}else{if (a == b){ans++;continue;}//如果在一个集合中,要判断关系是否正确if (find(a) == find(b)){if (rela[a] != (1 + rela[b]) % 3){ans++;}}elsejoin(a, b,1);}}cout << ans << endl;
}
signed main()
{ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python---六大数据结构】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; Python---六大数据结构 往期内容前言概述一下可变与不可变 Number四种不同的数值类型Number类型的创建i…

深入解析鸿蒙系统的页面路由(Router)机制

鸿蒙系统以其独特的分布式架构和跨设备的统一体验而备受瞩目。在这个系统中&#xff0c;页面路由&#xff08;Router&#xff09;机制是连接应用各页面的关键组成部分。本文将深入探讨鸿蒙系统的页面路由&#xff0c;揭示其工作原理、特点以及在应用开发中的实际应用。 1. 实现…

OpenHarmony系统解决方案 - 配置屏幕方向导致开机动画和Launcher显示异常

问题环境 系统版本&#xff1a;OpenHarmony-3.2-Release 问题现象 配置设备默认方向&#xff0c;例如修改为横屏显示&#xff0c;修改文件display_manager_config.xml的buildInDefaultOrientation参数值为2(Orientation::HORIZONTAL)。 源码中文件位于foundation/window/win…

适用于电脑和手机的照片恢复工具指南

这是适用于 Android、iPhone、Mac 和 Windows 的最佳照片恢复应用程序的指南。 如果您不小心删除了一堆珍贵的照片&#xff0c;请不要担心&#xff01; 恢复丢失的照片和数据实际上比您想象的要容易得多。 通过使用照片恢复应用程序&#xff0c;您可以“解锁”存储卡或硬盘驱…

php基础学习之文件包含

描述 在一个php脚本中&#xff0c;将另一个php文件包含进来&#xff0c;合作实现某种功能 这个描述看起来似乎和C/Java等语言的头文件/包有点类似&#xff0c;但本质是不一样的 打个比方&#xff1a; C/Java的头文件/包更像是一个工具箱&#xff0c;存放各种很完善的工具&#…

LabVIEW开发DUP实时监控系统

LabVIEW开发DUP实时监控系统 该项目采用虚拟仪器设计理念&#xff0c;以LabVIEW作为核心技术平台&#xff0c;开发了一套磁控溅射过程的实时监控系统。实现过程中关键参数的全面数据采集与处理&#xff0c;建立完整的历史数据库&#xff0c;以支持涂层技术的改进和系统向模糊控…

Leetcode1423.可获得的最大点数

文章目录 题目原题链接思路&#xff08;逆向思维&#xff09; 题目 原题链接 Leetcode1423.可获得的最大点数 思路&#xff08;逆向思维&#xff09; 由题目可知&#xff0c;从两侧选k张&#xff0c;总数为n张&#xff0c;即从中间选n - k张 nums总和固定&#xff0c;要选k张最…

RK3399平台开发系列讲解(调试篇)死锁检测工具lockdep

🚀返回专栏总目录 文章目录 一、常见死锁场景二、lockdep使用方法三、lockdep技术原理3.1、锁类状态3.2、检查规则沉淀、分享、成长,让自己和他人都能有所收获!😄 📢介绍死锁检测工具lockdep。 资料 一、常见死锁场景 场景1:进程重复申请同一个锁,称为AA死锁。例如…

深入理解lambda表达式

深入理解ASP.NET Core中的中间件和Lambda表达式 var builder WebApplication.CreateBuilder(args); var app builder.Build(); app.Use(async (context, next) > { // Add code before request. await next(context);// Add code after request.}); 这段C#代码是用于设…

【打工日常】使用docker部署Dashdot工具箱

一、Dashdot介绍 dashdot是一个简洁清晰的服务器数据仪表板&#xff0c;基于React实现 &#xff0c;主要是显示操作系统、进程、存储、内存、网络这五个的数据。 二、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境 2. 本地环境规划 本次实践环境规划&#xf…

不错的PMO 2024建设规划长图

公众号"PMO前沿"是国内最大的PMO组织&#xff0c;经常各个城市举办线下线上活动&#xff0c;很多专家&#xff0c;相当赞&#xff0c;而且每天还分享不少文章&#xff08;春节都不停更&#xff0c;相当感动&#xff09;&#xff0c;建议关注。看到一个不错的PMO 组织…

社区居家养老新选择,全视通智慧方案让长者生活更安心

随着人口老龄化趋势加剧&#xff0c;养老问题已经成为社会各界关注的焦点。我国政府积极采取相关措施&#xff0c;加速推动养老服务业的健康发展。2023年5月&#xff0c;《城市居家适老化改造指导手册》发布&#xff0c;针对城市老年人居家适老化改造需求&#xff0c;提出了47项…