青牛小学今天开学了,天真无邪的牛牛们都希望彼此之间做朋友 已知每只牛都有一些特长,如果两只牛的特长有交集,则他们会成为朋友。 同时牛牛们还喜欢把自己的朋友介绍给别人,即如果大牛和二牛是朋友,二牛和三牛是朋友,我们认为大牛和三牛也是朋友 牛牛们为了和别人交朋友,每次可以花费1桶牛奶学习一项特长 现在班主任想知道,最少需要花费多少桶牛奶才能让牛牛们都成为朋友
第一行两个整数N, M,表示牛的个数以及特长的个数 接下来N行,每行一个长度为M的0/1字符串,表示各个牛的特长 若第i行,第j列的字符为1,则表示第i只牛已经学会了第j项特长,若为0则表示未学会
一个整数表示答案,若无解,则输出-1
2 2 00 00
2
5 4 0110 1001 0010 0100 1000
1
考点:并查集
限制 1 秒 / 256MB | 标准输入输出
推荐方向:并查集
本题切入点
特长有交集即连通,用并查集求初始连通块数;再贪心地用最少的新增特长把所有连通块合并成一整块。
用「代表元」高效维护集合合并与连通性查询,均摊近 O(1)。
思路框架(并查集 通法 · 非本题专属)
实现要点:路径压缩 + 按大小合并,复杂度近似 O(α(n))。
复杂度:时间 O(n α(n)) | 空间 O(n)
该范式的通法易错点
样例 1:输入 2 2 / 00 / 00 → 输出 2
可以花两桶牛奶,让两只牛都学习特长1
样例 2:输入 5 4 / 0110 / 1001 / 0010 / 0100 / 1000 → 输出 1
让奶牛2学习特长2即可
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:贝壳找房2023届校招测试类试卷。