【2022年蓝桥杯真题之带权并查集问题】推导部分和
创始人
2025-05-31 07:13:00

⭐️前面的话⭐️

【2022年蓝桥杯真题之带权并查集问题】推导部分和
对于一个长度为 NNN 的整数数列 A1,A2,⋯ANA_1, A_2, \cdots A_NA1​,A2​,⋯AN​, 小蓝想知道下标 lll 到 rrr 的部分和 ∑i=lr=Al+Al+1+⋯+Ar\sum_{i=l}^r=A_l+A_{l+1}+\cdots+A_r∑i=lr​=Al​+Al+1​+⋯+Ar​ 是多少?
然而, 小蓝并不知道数列中每个数的值是多少, 他只知道它的 MMM 个部 分和的值。其中第 iii 个部分和是下标 lil_ili​ 到 rir_iri​ 的部分和 ∑j=liri=\sum_{j=l_i}^{r_i}=∑j=li​ri​​= Ali+Ali+1+⋯+AriA_{l i}+A_{l i+1}+\cdots+A_{r i}Ali​+Ali+1​+⋯+Ari​, 值是 SiS_iSi​ 。解题代码:Java, C++。

📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2023年3月20日🌴
✉️坚持和努力一定能换来诗与远方!
💭推荐书籍:📚《算法》,📚《算法导论》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!


📌导航小助手📌

  • ⭐️推导部分和⭐️
    • 🔐题目详情
      • 问题描述
      • 输入格式
      • 输出格式
      • 样例输入
      • 样例输出
      • 评测用例规模与约定
      • 运行限制
    • 💡解题思路
    • 🔑源代码
  • 🌱总结


⭐️推导部分和⭐️

🔐题目详情

问题描述

对于一个长度为 NNN 的整数数列 A1,A2,⋯ANA_1, A_2, \cdots A_NA1​,A2​,⋯AN​, 小蓝想知道下标 lll 到 rrr 的部分和 ∑i=lr=Al+Al+1+⋯+Ar\sum_{i=l}^r=A_l+A_{l+1}+\cdots+A_r∑i=lr​=Al​+Al+1​+⋯+Ar​ 是多少?
然而, 小蓝并不知道数列中每个数的值是多少, 他只知道它的 MMM 个部 分和的值。其中第 iii 个部分和是下标 lil_ili​ 到 rir_iri​ 的部分和 ∑j=liri=\sum_{j=l_i}^{r_i}=∑j=li​ri​​= Ali+Ali+1+⋯+AriA_{l i}+A_{l i+1}+\cdots+A_{r i}Ali​+Ali+1​+⋯+Ari​, 值是 SiS_iSi​ 。

输入格式

第一行包含 3 个整数 N、MN 、 MN、M 和 QQQ 。分别代表数组长度、已知的部 分和数量和询问的部分和数量。
接下来 MMM 行, 每行包含 3 个整数 li,ri,Sil_i, r_i, S_ili​,ri​,Si​ 。
接下来 QQQ 行, 每行包含 2 个整数 lll 和 rrr, 代表一个小蓝想知道的部分 和。

输出格式

对于每个询问, 输出一行包含一个整数表示答案。如果答案无法确定, 输出 UNKNOWN。

样例输入

5 3 3
1 5 15
4 5 9
2 3 5
1 5
1 3
1 2

样例输出

15
6
UNKNOWN

评测用例规模与约定

对于 10%10 \%10% 的评测用例, 1≤N,M,Q≤10,−100≤Si≤1001 \leq N, M, Q \leq 10,-100 \leq S_i \leq 1001≤N,M,Q≤10,−100≤Si​≤100
对于 20%20 \%20% 的评测用例, 1≤N,M,Q≤20,−1000≤Si≤10001 \leq N, M, Q \leq 20,-1000 \leq S_i \leq 10001≤N,M,Q≤20,−1000≤Si​≤1000
对于 30%30 \%30% 的评测用例, 1≤N,M,Q≤50,−10000≤Si≤1 \leq N, M, Q \leq 50,-10000 \leq S_i \leq1≤N,M,Q≤50,−10000≤Si​≤ 10000 。
对于 40%40 \%40% 的评测用例, 1≤N,M,Q≤1000,−106≤Si≤1061 \leq N, M, Q \leq 1000,-10^6 \leq S_i \leq 10^61≤N,M,Q≤1000,−106≤Si​≤106
对于 60%60 \%60% 的评测用例, 1≤N,M,Q≤10000,−109≤Si≤1 \leq N, M, Q \leq 10000,-10^9 \leq S_i \leq1≤N,M,Q≤10000,−109≤Si​≤ 10910^9109 。
对于所有评测用例, 1≤N,M,Q≤105,−1012≤Si≤1 \leq N, M, Q \leq 10^5,-10^{12} \leq S_i \leq1≤N,M,Q≤105,−1012≤Si​≤ 1012,1≤li≤ri≤N,1≤l≤r≤N10^{12}, 1 \leq l_i \leq r_i \leq N, 1 \leq l \leq r \leq N1012,1≤li​≤ri​≤N,1≤l≤r≤N 。数据保证没有矛盾。

运行限制

  • 最大运行时间:3s
  • 最大运行内存: 512M

💡解题思路

根据前缀和的经验,我们知道区间[l,r][l, r][l,r]的和可以表示为d[r]−d[l−1]d[r] - d[l - 1]d[r]−d[l−1],其中ddd为前缀和数组,这道题差不多是反着过来的,题目会给定若干组区间和,然后需要根据这些信息去推导其他区间的区间和,第一眼看了是完全懵逼的,看了一位大佬的题解后【大佬贴贴】,明白可以使用带权并查集来做,这个和y总讲的算法基础课中的【食物链】这道题有点像。

前缀和是第一个元素为参照,陆续求出后续元素的累加和,利用区间相减的原则推导出某段区间的和。使用带权并查集来做可以类比一下,我们以并查集的根节点为参照,如d[r]d[r]d[r]就表示rrr结点到所在并查集的距离,同理对于[l,r][l, r][l,r]的区间和也可以使用d[r]−d[l−1]d[r]-d[l-1]d[r]−d[l−1]来表示。假设区间[l,r][l, r][l,r]的区间和为sss,由于[l,r][l, r][l,r]区间和表示为d[r]−d[l−1]d[r]-d[l-1]d[r]−d[l−1],也就是rrr到根的距离与l−1l-1l−1到根的距离之差,我们可以将rrr所在并查集和l−1l-1l−1所在并查集进行合并,为了方便表示不妨记录t=l−1t=l-1t=l−1。

合并前:s=d[r]−d[t]s=d[r]-d[t]s=d[r]−d[t]
1
合并后:s=d[r]−(d[t]+d[pt])s = d[r] - (d[t] + d[pt])s=d[r]−(d[t]+d[pt])
d[pt]=d[r]−d[t]−sd[pt] = d[r] - d[t] - sd[pt]=d[r]−d[t]−s
2
将所有区间全部加入并查集后就可以直接利用类似前缀和的写法进行查询。

在查询时,如果l−1l-1l−1与rrr不在同一个并查集当中,那么肯定是求不出来了,否则可以查询到结果。

🔑源代码

并查集实现时利用路径压缩增加效率。

java 代码:

import java.util.*;class Main {static final int N = (int) 2e5 + 10;static int[] p = new int[N];static long[] d = new long[N];static Scanner sc = new Scanner(System.in);static int n, m, q;static int find(int x) {if (p[x] != x) {int t = p[x];p[x] = find(p[x]);d[x] += d[t];}   return p[x];}public static void main(String[] args) {n = sc.nextInt();m = sc.nextInt();q = sc.nextInt();//init uffor (int i = 1; i <= n; i++) p[i] = i;while (m-- > 0) {int l = sc.nextInt();int r = sc.nextInt();long s = sc.nextLong();int pt = find(l - 1), pr = find(r);p[pt] = pr;//更新d[pt]d[pt] = d[r] - s - d[l - 1];}while (q-- > 0) {int l = sc.nextInt();int r = sc.nextInt();int pt = find(l - 1), pr = find(r);if (pt != pr) System.out.println("UNKNOWN");else System.out.println(d[r] - d[l - 1]);}}
}

c++代码:

//带权并查集 与算法基础课中的食物链较像
//以一个根结点为参照,l-1到根结点的距离为d[l-1] r到根结点的距离为d[r]
//根据前缀和原理 [l, r] 区间和为 d[r] - d[l - 1]
#include 
#include 
#include using namespace std;
typedef long long LL;
const int N = (int) 2e5 + 10;//并查集 
int p[N];
//到根的权重
LL d[N];int n, m, q;int find(int x) 
{if (p[x] != x) {int t = p[x];p[x] = find(p[x]);d[x] += d[t];}return p[x];
}int main() 
{cin >> n >> m >> q;//初始化并查集for (int i = 1; i <= n; i++) p[i] = i;while (m-- > 0) {LL l, r, s;cin >> l >> r >> s;//找根结点int pl = find(l - 1), pr = find(r);//合并p[pl] = pr;d[pl] = d[r] - d[l - 1] - s;}//查询//如果l, r都在同一个集合,则存在结果,否则不能查出结果while (q-- > 0) {int l, r;cin >> l >> r;int pl = find(l - 1), pr = find(r);if (pl != pr) cout << "UNKNOWN" << endl;else cout << d[r] - d[l - 1] << endl;}return 0;
}

🌱总结

本题思维难度较大,带权并查集的思路并不好想。


觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!

1-99

相关内容

热门资讯

酸菜鱼的“中年危机”,太二最焦... 总第4247期作者 |餐饮老板内参内参君闭店、降价、破“规矩”太二酸菜鱼“不狂了”竟不知,从何时开始...
V观财报丨*ST同洲:17日起... 【V观财报丨*ST同洲:17日起撤销退市风险警示及其他风险警示】*ST同洲15日公告,公司股票将于2...
原创 安... 两年前,“北溪”管道爆炸案的发生至今依然如悬而未决的谜团,笼罩在国际关系之中。虽然多国对此展开了调查...
晓数点|一周个股动向:11股周... 本周(6月9日至6月13日)的五个交易日中,A股三大指数涨跌不一,沪指累计跌0.25%,深成指跌0....
张朝阳不要的绝版LABUBU,... 红星资本局6月15日消息,张朝阳“后悔送回”的绝版LABUBU,又有了新去向。6月15日,胡润发布一...
坚固的男性视角和虎扑一起贬值 在如今的时代,那曾经被视为坚固的男性视角似乎正逐渐发生着变化。曾经在虎扑等平台上,男性视角那般坚定而...
夏天的意思是,我们该出来晒一晒... 咱们中国人,能拿出来晒给你看的,必然是最好的了吧。大家有没有发现,大促当头,没有人“拍广告”了!今年...
新能源车企IPO放缓!一家暂停... 在众多新能源车企的时间表里,今年本应成为达成IPO大计的一年。然而,在新能源车企IPO审查趋严、资本...
广州直击!现场排长龙,不停涨价... 南都记者现场注意到,已经抢到拉布布的黄牛们竟然在旁边的茶饮店内搭起了“临时的线下交易市场”:他们一边...
TikTok月活已突破10亿! 根据 Sensor Tower 的数据,字节跳动旗下 TikTok 的月活跃用户在 5 月份突破 1...
Labubu新品遭黄牛哄抢高价... 6月12日晚上10点,泡泡玛特在线上小程序和官方旗舰店发布系列新品,其中,Labubu新品THE M...
V观财报丨海大集团:海外产能扩... 【V观财报丨海大集团:海外产能扩张以自建为主】海大集团15日披露《2025年6月13日投资者关系活动...
A股的3400点突围战开始了丨... 作者|范亮编辑|郑怀舟封面来源|视觉中国上证指数年内第三次冲刺3400点失败,与此同时,银行板块再次...
泡泡玛特王宁成河南新首富;蜜雪... 一周市场回顾A股本周A股整体呈现冲高回落的走势,上证指数本周跌幅0.25%,沪深300也在周内跌幅0...
刚完成整改又收警示函,“假发大... 接连收到两份警示函,暴露出瑞贝卡存在的内控问题,而去年1.176亿元的净利润亏损,则将“假发大王”的...
原创 以... 家人们,今天咱来唠唠“以房养老”这个事儿。这词儿大家应该都不陌生,不少人还把它当成晚年生活的一根救命...
小时候的 2 元纸币,价格达到... 小时候用的 2 块钱纸币,谁能想到啊,如今在收藏市场上可成了抢手货,最高价格达到了29999元起! ...
哈根达斯中国业务或被出售,面临... 公司动态 近日,通用磨坊旗下高端冰淇淋品牌哈根达斯中国业务传出可能被出售的消息,相关流程或于202...
小米只会营销没有创新?雷军推荐... 今天是父亲节,雷军照常打卡并发文:今天父亲节,祝所有父亲们节日快乐! 随后,雷军还推荐大家看《十...
炒股不如炒谷了?谷子经济大火背... 最近几年,只要说起谷子经济,相信很多人都不陌生,作为新兴的年轻人经济的代名词,谷子可以说成为了不少消...
四十了,一事无成,怎么办? 四十岁,本应是人生中积累了一定经验和成果的阶段,可如今却一事无成,这确实会让人陷入迷茫和焦虑。看着身...
2300多亿没了,“瑜伽裤中的... “2300 多亿没了,‘瑜伽裤中的爱马仕’怎么了?”这一现象令人震惊。曾被誉为“瑜伽裤中的爱马仕”的...
东软集团换帅:创始人刘积仁卸任... 经观新科技 经济观察网讯天眼查信息显示,东软集团近期完成工商信息变更,公司法定代表人及董事长由刘积...
天合光能:拟向控股子公司天合储... 【大河财立方消息】6月13日,天合光能发布公告,公司拟通过全资子公司天合能投向公司控股子公司江苏天合...
原创 曾... 前言 美国急着要发8000多亿美元国债,四个月内全得出手,可十年期美债收益率已经飙到5%。 面对美...
V观财报丨安泰科技:未涉及矿山... 【V观财报丨安泰科技:未涉及矿山开采业务,目前没有相关收购计划】安泰科技15日通过深交所互动易平台回...
泉州:没钱,还是留不住钱? 泉... 原创 刘晓博泉州,是一个GDP较高的城市。不仅在全国非省会地级市里名列第四,也超过了身旁的副省级城市...
下周关注丨5月份宏观经济数据将... 【重磅新闻】5月份宏观经济数据将发布国家统计局将于6月16日发布5月份宏观经济数据。机构分析,工业、...
伦敦赛:郑钦文1-2不敌阿尼西... 北京时间6月15日凌晨,2025赛季女子网球WTA500系列伦敦站继续进行,在女单半决赛中,头号种子...
京东MALL北京二店开业,刘强... 6月14日,京东MALL北京双井店正式开业,这是京东在北京开业的第二家京东MALL。 刘强东创业期...