题目大意是: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()函数,查找输入根,得到该树的总结点个数,输出即可;
代码: