并查集——糖果

幼儿园老师需要分糖果给小朋友,每个小朋友都有期望的最小糖果数,并且朋友之间糖果数不能相差太大。通过并查集算法,解决最少糖果数的分配问题,确保所有小朋友满意。文章介绍了题意、输入输出描述,解析了解题思路,分享了C++实现代码。
摘要由CSDN通过智能技术生成

题目描述

链接:https://ac.nowcoder.com/acm/contest/9983/G
来源:牛客网

在一个幼儿园里面有 n 个小朋友,分别编号 1,2,…,n。在这些小朋友中有一些小朋友互为朋友关系,总共有 m 对朋友。作为幼儿园老师,你想买一些糖果分给小朋友,你知道第 i 个小朋友想要至少 a[i] 个糖果,否则他就会不开心。同时,如果一个小朋友得到的糖果数小于他某个朋友得到的糖果数,他也会不开心。请问你最少买多少糖果才能保证每个小朋友都不会不开心呢?

输入描述

第一行以空格分隔的两个整数 n, m。
第二行以空格分隔的 n 个正整数 a[i]。
接下来 m 行每行以空格分隔的两个正整数 u, v,代表 u 是 v 的朋友,v 是 u 的朋友。
1 <= n <= 1e6
0 <= m <= 1e6
1 <= a[i] <= 1e9
1 <= u,v <= n, u != v

输出描述

购买的最少糖果数以保证每个小朋友都不会不开心。

解题思路

这道题需要注意的是当 a和b是朋友,b和c是朋友,此时a和b的糖果数相等,b和c的糖果数也相等,即a,b,c的糖果数都相等,所以实际上他们相互都是朋友。综上,我们可以将他们并入一个同一个集合,运用并查集的方法解题。

心得

并查集的应用相对广泛,可以配合下面我个人对并查集的理解和代码来进行学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值