并查集基础, 代码是以前写的了!
#include <bits/stdc++.h>
using namespace std;
const int N = 30010;
int p[N], cnt[N];//cnt只表示根节点的意义
int n, m;
int find(int x) // 并查集
{
if (p[x] != x) p[x] = find(p[x]);
return p[x];
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i ++ )
{
p[i] = i;//初始化并查集和根节点元素个数
cnt[i] = 1;
}
while (m -- )
{
int x, a;
cin >> x;
cin >> a;
int pa = find(a);
for (int i = 1; i < x; i ++ )
{
int b;
cin >> b;
int pb = find(b);
pa = find(a);//!!因为可能上一次更新了根节点,所以需要重新找一下,不然cnt的更新就会出现问题
if (pa == pb) continue;
cnt[pb] += cnt[pa];
p[pa] = pb;
}
}
int res = 1;
for (int i = 1; i <= n; i ++ )
res = max(res, cnt[i]);
cout << res << endl;
return 0;
}