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/10/17 10:44:55 阅读更多 →
跨文化交流:书信往来的独特魅力与实践技巧

跨文化交流:书信往来的独特魅力与实践技巧

1. 为什么我们需要跨文化交流 最近整理书房时,翻出一沓泛黄的明信片,都是这些年与各国笔友往来的见证。其中一张来自巴西的卡片特别引人注目——上面用歪歪扭扭的中文写着"你好吗?我很想念中国的饺子"。这让我突然意识到&#xff0…

2026/10/18 13:02:10 阅读更多 →
2026最适合中小成人商务英语培训机构低成本获客神器,主流招生裂变工具功能实测,含零代码SAAS、AI编程、源码定制交付

2026最适合中小成人商务英语培训机构低成本获客神器,主流招生裂变工具功能实测,含零代码SAAS、AI编程、源码定制交付

2026最适合中小成人商务英语培训机构低成本获客神器,主流招生裂变工具功能实测 在成人商务英语培训行业竞争不断加剧的背景下,成人英语、职场口语、商务沟通、企业英语和外贸英语机构,仅靠线下服务、纸质档案和微信群通知,已经很…

2026/10/16 11:00:11 阅读更多 →

最新新闻

Claude Code知识工作插件实战:用slash command封装可复用工作流

Claude Code知识工作插件实战:用slash command封装可复用工作流

1. 从“knowledge-work-plugins”这个名字说起:它到底在解决什么问题第一次看到knowledge-work-plugins这个仓库名,很多人会下意识地把它当成又一个“插件合集”。但如果你真的在 Claude Code 或 Claude Cowork 里干过几天活,就会明白它想解决…

2026/10/18 17:49:46 阅读更多 →
模型压缩实战:量化四大招数解决显存不足与推理提速

模型压缩实战:量化四大招数解决显存不足与推理提速

不知道你有没有过这种体验:好不容易微调好一个模型,放到服务器上正准备迎接夸赞,结果显存直接爆了,接口响应慢得像在拨号上网。32GB的显存听起来不小,可一个大模型光权重文件就占了20多个GB,再加上中间计算…

2026/10/18 17:49:46 阅读更多 →
中国城市统计年鉴数据处理管道源码解析与实战

中国城市统计年鉴数据处理管道源码解析与实战

简介:这份资源面向城市经济、社会学与环境科学等领域的研究者及数据分析开发者,提供《中国城市统计年鉴》1985至2024年全套数据的配套可运行源码,用于快速加载、检索与二次开发城市统计数据。压缩包共3个文件,以inscode工程配置、…

2026/10/18 17:49:46 阅读更多 →
西门子PLC电梯群控动态权重算法实战解析

西门子PLC电梯群控动态权重算法实战解析

简介:本资源是西门子杯中国智能制造挑战赛一等奖获奖项目——六部十层电梯群控系统的完整PLC参考程序,面向自动化、电气工程及智能制造方向的高校学生、竞赛备赛者与工业控制初学者,解决多梯协同调度、实时响应与能效优化等核心工程问题。压缩…

2026/10/18 17:49:46 阅读更多 →
knowledge-work-plugins:Claude Code 插件体系与自定义命令实战

knowledge-work-plugins:Claude Code 插件体系与自定义命令实战

1. 从零认识 knowledge-work-plugins:它到底解决什么问题第一次看到knowledge-work-plugins这个仓库名,很多人会以为它只是某个工具的插件合集,随手 clone 下来翻两眼就丢到一边。但如果你真正在 Claude Code 或 Claude Cowork 里干过一段时间…

2026/10/18 17:49:46 阅读更多 →
中国水系SHP 1-5级数据处理实战:坐标系、属性清洗与河网分析

中国水系SHP 1-5级数据处理实战:坐标系、属性清洗与河网分析

简介:中国水系一级到五级数据集是一套面向GIS专业用户与科研工作者的矢量地理数据,按河流长度、流域面积及影响程度划分为从国家级大河到地方支流的多个等级。压缩包共包含二十七个文件,核心为四个shp矢量文件,用于存储河流线要素…

2026/10/18 17:48:46 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →