

题目大意是:a,b是朋友,a,c是朋友,则a,c是朋友, 每一行输入 表示这两人刚刚成为朋友,对每一行输入,需输出,两人所在的朋友圈的人数;
思路:并查集的应用,
用map<string, string> father 储存关系, key值表示结点,value表示key的father; map<string, int> count ,key值表示根结点,int为该树上总的结点个数; map<string, int> high ,key值为根节点,int为该树的高度, 用于合并时把低的树合并到高数上,防止树退化;
每输入一行,俩个人的名字,就在father中寻找是否有此结点,没有就将该节点建成独立的树,有就不用处理;然后因为两者成为朋友,需将他们的所在的树合并; 合并的时候,注意将低树接到高树的根上,同时修改高树上总的结点数;然后用myfind()函数,查找输入根,得到该树的总结点个数,输出即可;
代码:

这篇博客介绍了一种利用并查集解决朋友圈人数统计的问题。通过建立一个map存储节点及其父节点,并记录每个树的节点数和高度,当两个人成为朋友时,将他们所在的树合并,并更新树的节点数。代码实现中使用了C++,通过遍历输入,每次处理一对新朋友,最终输出每个人朋友圈的总人数。

1889

被折叠的 条评论
为什么被折叠?



