y1,y2总复习笔记7 2026.7.21
一并查集尾声边带权并查集进阶题目推理查询一个数组a里面有2的30次方个整数下标为0到2的​30次方​​−1。一开始你只知道每个数的范围是[0,2的30次方−1]但是并不知道每个数的具体数值。现在你要处理两种类型的操作1、1 l r x你被告知区间[l,r]内的元素异或和的结果是x即a[l]⊕a[l1]⊕…⊕a[r] x⊕为异或运算。如果当前给出的信息和前面的产生了矛盾应该忽略最新的这条信息。2、2 l r输出区间[l,r]内的元素异或和即输出a[l]⊕a[l1]⊕…⊕a[r]的结果。如果我们无法推出答案则输出-1。输出时强制在线第一行包含一个整数 q 表示操作的数量。接下来的q行每一行描述一个操作。每行的第一个数 t 表示操作的类型。给出的查询通过以下方式加密用 last 表示上一个 t2 类型询问对应的正确答案最初last0如果上一个答案为 -1则令 last1如果 t1 后面跟着三个整数L,R,X令l L⊕last, r R⊕last, x X⊕last如果l r的则交换l和r的值现在我们知道区间[l,r]内的元素异或和为x如果本次得到的信息和前面的产生了矛盾则忽略掉如果t2后面跟着两个整数 L,R令l L⊕last, r R⊕last如果 l r 的则交换 l 和 r 的值输出区间[l,r]内的元素异或和如果我们没法根据前面给出的信息推断出答案则输出-1。不要忘记每次执行完t2的操作之后更新last。输入保证t2的操作至少有一个。下标到2的30次方显然无法直接用数组来存我们考虑unordered_map存储重点在于查询询问区间和首先考虑前缀和思路若[L,R]完整存储 直接返回dis[R]^dis[L-1]若[L,R]可拆分为[L,x][x1,R] 返回dis[x]^dis[L-1]^dis[R]^dis[x]两次异或直接抵消变为dis[R]^dis[L-1]观察到似乎有一些图上连通性的感觉LR通过x祖先被链接在一起形成连通块若无法形成连通块就没有答案考虑并查集这样把问题转换成了区间[l, r]的异或和 点l-1和点r两点之间的异或距离。对于操作1等价于L-1注意到R链接了一条权值为k的边对于操作2则通过上述公式返回dis[R]^dis[L-1]我们分析一下dis[x]含义到底是什么x到祖先的异或距离dis[L]和dis[R]关系大概长这样L---------------------------x[我是答案]R-------------x是不是答案就有了那dis[x]咋求下文距离均代表异或距离在find函数中原本fa[x]就是x的祖先所以dis[x]就是x到fa[x]的距离后续的合并中fa[x]有了新的fa那么此时fa[x]不再是x的祖先成为旧祖先那么dis[fa[x]]就是旧祖先到新祖先的距离所以x到新祖先的距离就是x到fa[x]旧祖先的距离dis[x]和旧祖先到新祖先的距离那update呢 dis[xx]dis[x]^dis[y]^k;我是k-----------------------x---------xx y-----------yy------------- ---------------我是dis[x] 我是dis[y]------------------------- ----两个dis[x]重叠抵消了哦dis[x]^dis[y]^k很明显吧代码如下补充map.count(x)数x作为下标的数的个数#includebits/stdc.h #define ll long long using namespace std; const int N1e55; int T,n,m; unordered_mapint,int fa,dis; int Find(int x) { if(!fa.count(x)) { //x没出现过 return fa[x]x; } if(fa[x]x) return x; int fFind(fa[x]); dis[x]^dis[fa[x]]; return fa[x]f; } void Union(int x,int y,int k) { int xxFind(x),yyFind(y); if(xxyy) return ; fa[xx]yy; dis[xx]dis[x]^dis[y]^k; } int main() { scanf(%d,T); int last0; while(T--) { int opt,L,R; scanf(%d%d%d,opt,L,R); L^last,R^last; if(LR) swap(L,R); L--;//对L-1做操作 if(opt1) { int x; scanf(%d,x); x^last; Union(L,R,x); } else { if(Find(L)!Find(R)) { //不连通无答案 last1; printf(-1\n); } else { lastdis[L]^dis[R]; printf(%d\n,last); } } } }扩展域并查集只看一个题团伙现在有 n 个人他们之间有两种关系朋友和敌人。我们知道一个人的朋友的朋友是朋友一个人的敌人的敌人是朋友现在要对这些人进行组团。两个人是朋友就在一个团伙中。请求出这些人中最多可能有的团体数。扩展域并查集每个点有多种状态状态之间做合并来判定关系一个人有朋友和敌人两种状态这个题中设i为i这个点的朋友态本体设in为i这个点的敌人态即若有i作为某某的敌人的场景此时的i变为in普通并查集只能维护同类关系无法同时处理「朋友 / 敌人」两类对立关系因此采用拆点 把每个人 i 拆成两个点i代表 i 的朋友域自己和朋友in代表 i 的敌人域敌对如果一个人和我的朋友态联通在我的朋友域那他就是我的朋友我俩是一伙的如果一个人和我的敌人态联通在我的敌人域那我俩就不是一伙的统计团伙数量时考虑本体所属的团体set去重记录团体数量#includebits/stdc.h using namespace std; const int N2e35; int n,m,ans,fa[N]; int Find(int x){ if(fa[x]x) return x; return fa[x]Find(fa[x]); } void Union(int x,int y){ int xxFind(x),yyFind(y); fa[xx]yy; } int main(){ scanf(%d%d,n,m); for(int i1;i2*n;i) fa[i]i; while(m--){ int x,y; char c[2]; scanf(%s%d%d,c,x,y); if(c[0]F) Union(x,y); else{ //x和y是敌人敌人的敌人是朋友 Union(yn,x);//y的敌人和x的朋友是一类 Union(xn,y);//x的敌人和y的朋友是一类 } } setint s; for(int i1;in;i){ s.insert(Find(i)); } printf(%d,s.size()); }二最小生成树kruskal算法什么是最小生成树把整张图所有点全部连起来不能有环一共 n 个点只用 n-1 条边。 简单说连通全部点、无环的子图 生成树。满足上面生成树的条件并且所有边的权值加起来总和最小就是最小生成树。那克鲁斯卡尔算法是把所有边按权从小到大排序从小到大依次拿边如果这条边的两个点不在同一集合连上不会成环就选这条边直到选出 n-1 条边结束。这样就有了最小生成树了总体是一个贪心的算法模板如下bool cmp(node x,node y){ return x.zy.z; } int Find(int x){ if(xfa[x]) return x; return fa[x]Find(fa[x]); } int kruskal(){ sort(edge1,edgem1,cmp); for(int i1;in;i){ fa[i]i; } int ans0,cnt0; for(int i1;im;i){ int xxFind(edge[i].x),yyFind(edge[i].y); if(xxyy) continue; cnt; ansedge[i].z; fa[xx]yy; } if(cnt!n-1){ return 0; } return ans; }今天就这样明天应该是有prim和例题还有最后3篇了

相关新闻

3分钟搞定:用PostgreSQL版Northwind数据库开启你的SQL实战之旅

3分钟搞定:用PostgreSQL版Northwind数据库开启你的SQL实战之旅

3分钟搞定:用PostgreSQL版Northwind数据库开启你的SQL实战之旅 【免费下载链接】northwind_psql Northwind sample database for postgres 项目地址: https://gitcode.com/gh_mirrors/no/northwind_psql 你是否正在寻找一个既经典又实用的数据库来练习SQL技能…

2026/7/22 11:57:54阅读更多 →
HarmonyOS应用开发实战:小事记 - 触摸事件系统:onTouch 的事件分发与冒泡机制

HarmonyOS应用开发实战:小事记 - 触摸事件系统:onTouch 的事件分发与冒泡机制

前言 onTouch 是 ArkUI 中最底层的触摸事件,是所有手势的基础。理解 onTouch 的事件分发和冒泡机制,是解决手势冲突和实现复杂交互的前提。本文以小事记(xiaoshiji_ohos_app) 的卡片点击事件为背景,深入解析 onTouch …

2026/7/22 11:57:54阅读更多 →
小程序毕设选题推荐:基于 JavaWeb 的安阳特色文旅资讯、路线规划服务系统 面向游客的畅玩安阳信息交互平台实现【附源码、mysql、文档、调试+代码讲解+全bao等】

小程序毕设选题推荐:基于 JavaWeb 的安阳特色文旅资讯、路线规划服务系统 面向游客的畅玩安阳信息交互平台实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/22 11:55:54阅读更多 →
10大开源无代码AI平台:零编码构建LLM应用与RAG系统

10大开源无代码AI平台:零编码构建LLM应用与RAG系统

这次我们来看10个开源无代码AI平台,它们让构建LLM应用、RAG系统和AI智能体变得像搭积木一样简单。无论你是想快速验证AI想法,还是需要为企业部署智能问答系统,这些平台都能在零编码的情况下帮你实现。最值得关注的是,这些平台大多…

2026/7/22 12:52:04阅读更多 →
超低功耗 MCU 睡眠与唤醒策略详解:从 WFI/WFE 指令到外部中断唤醒的完整功耗链路分析

超低功耗 MCU 睡眠与唤醒策略详解:从 WFI/WFE 指令到外部中断唤醒的完整功耗链路分析

超低功耗 MCU 睡眠与唤醒策略详解:从 WFI/WFE 指令到外部中断唤醒的完整功耗链路分析 一、深度引言 可穿戴医疗设备的功耗预算通常在亚毫安级别——一枚 150mAh 的纽扣电池需支撑 7–14 天连续运行。在典型应用场景中,MCU 99% 以上时间处于睡眠状态&…

2026/7/22 12:52:04阅读更多 →
在线判题系统的并发提交处理:消息队列解耦与异步回调设计

在线判题系统的并发提交处理:消息队列解耦与异步回调设计

在线判题系统的并发提交处理:消息队列解耦与异步回调设计 一、深度引言与场景痛点:当 100 个人同时点"提交",系统发生了什么? V1 版本的判题系统用的是最简单的同步模式:用户点"提交" → HTTP 请求…

2026/7/22 12:52:04阅读更多 →
心率异常检测端侧推理引擎设计:PPG 信号预处理与 TCN 时序模型在 nRF52 上的部署方案

心率异常检测端侧推理引擎设计:PPG 信号预处理与 TCN 时序模型在 nRF52 上的部署方案

心率异常检测端侧推理引擎设计:PPG 信号预处理与 TCN 时序模型在 nRF52 上的部署方案 一、深度引言 可穿戴健康监测设备的核心价值在于对生理信号的实时、准确分析。PPG(光电容积描记法)传感器以极低功耗采集心率波形,但其原始信号…

2026/7/22 12:52:04阅读更多 →
大模型技术入门:从Python基础到LangChain实战

大模型技术入门:从Python基础到LangChain实战

1. 大模型技术入门指南:从零开始的系统学习路径 作为一名经历过从入门到实战全过程的AI开发者,我深知新手在学习大模型技术时面临的困惑。市面上资料繁杂,工具框架层出不穷,很容易陷入"学了很多却不会用"的困境。这篇指…

2026/7/22 12:52:04阅读更多 →
黄金用量说明查询API聚合接口:参数配置、curl与Python工程化接入

黄金用量说明查询API聚合接口:参数配置、curl与Python工程化接入

适用场景与接口能力 在金融资讯应用、电商计价系统或个人投资分析工具中,实时获取黄金用量说明是一项常见需求。黄金用量说明数据通常分为国际贵金属报价、国内现货价以及各大品牌金店的零售价,来源分散、格式不统一。本文介绍的聚合查询API一次性提供上…

2026/7/22 12:50:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

2026/7/22 0:01:17阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →