题目
思路
并查集,输入n和m
然后m个俱乐部里面取第一个人进行朋友圈交涉,让其余的人都纳入第一个人的集合中father[find(a)] = find(b) //b的祖先是a的在祖先
处理完所有人的关系后再对齐进行计数
代码
#include<map>
#include<iostream>
using namespace std;
map<int, int>father;
map<int,int> count;
int find(int& s)
{
if(father[s]==s)
return s;
else
return father[s]=find(father[s]);
}
void U(int& a, int& b)
{
father[find(a)] = find(b);//让b的祖先变成a的祖先
//这里由于最后才统计数量,所以并不需要计算count
}
int main()
{
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i++)
father[i] = i;
for(int i = 0; i < m; i++)
{
int k;
cin >> k;
if(!k) continue;
int first;
cin >> first;
for(int j = 1; j < k; j++)
{
int other;
cin >> other;
U(first,other);
}
}
for(int i = 1; i <= n; i++)
count[find(i)]++;
int MAX = 0;
for(int i = 1; i <= n; i++)
if(MAX < count[find(i)])
MAX = count[find(i)];
cout << MAX << endl;
}