题目描述
链接: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的糖果数都相等,所以实际上他们相互都是朋友。综上,我们可以将他们并入一个同一个集合,运用并查集的方法解题。
心得
并查集的应用相对广泛,可以配合下面我个人对并查集的理解和代码来进行学习