1. 字节跳动大闯关
题目描述:
Bytedance Efficiency Engineering团队在8月20日搬入了学清嘉创大厦。为庆祝团队的乔迁之喜,字节君决定邀请整个EE团队,举办一个大型团建游戏-字节跳动大闯关。可是遇到了一个问题:
EE团队共有n个人,大家都比较害羞,不善于与陌生人交流。这n个人每个人都向字节君提供了自己认识人的名字,不包括自己。如果A的名单里有B,或B的名单里有A,则代表A与B相互认识。同时如果A认识B,B认识C,则代表A与C也会很快认识,毕竟通过B的介绍,两个人就可以很快相互认识的了。
为了大闯关游戏可以更好地团队协作、气氛更活跃,并使得团队中的人可以尽快的相互了解、认识和交流,字节君决定根据这个名单将团队分为m组,每组人数可以不同,但组内的任何一个人都与组内的其他所有人直接或间接的认识和交流。如何确定一个方案,使得团队可以分成m组,并且这个m尽可能地小呢?
思路:简单的集合合并
合并策略:初始自己是一个集合,集合个数为n;
遍历第i名同学————第n名同学,i同学和他朋友们依次判断是否是一个集合,如果没在一个集合,进行合并,n--;
数据结构:并查集结构
作者:*程序牛*
链接:ht