@[o7u7o](/user/530679) 你的并查集完全可以用一个数组来表示大小(启发式合并),最后输出直接是cout<<siz[find(1)]<<endl;
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define pii pair<int,int>
#define mp make_pair
#define st string
#define vint vector<int>
#define vll vector<ll>
#define For(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define Refor(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define pb push_back
#define maxn 100005
int n,m;
vll arr(maxn);
//记录大小
vll siz(maxn,1);
ll find(ll x)
{
if(x==arr[x])
{
return x;
}
else
{
return arr[x]=find(arr[x]);
}
}
void hebing(int k,int mid)
{
k=find(k);
mid=find(mid);
if(k==mid)
{
return;
}
//这里是个优化是让小的树接到大的树上去
if(siz[k]>siz[mid])
{
swap(k,mid);
}
arr[k]=mid;
siz[mid]+=siz[k];
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
//输入输出没什么好看的(写的很粗糙)
cin>>n>>m;
For(i,1,n)
{
arr[i]=i;
}
while(m--)
{
int p,k;
cin>>p;
cin>>k;
p--;
while(p--)
{
int mid;
cin>>mid;
hebing(k,mid);
}
}
//最后就直接找1的群,输出大小
cout<<siz[find(1)]<<endl;
return 0;
}
```
by sll00 @ 2024-03-22 17:34:13
@[sll00](/user/1243869) %%%学到了,感谢大佬
by o7u7o @ 2024-03-23 09:55:12
@[sll00](/user/1243869) 但发现TLE是快读的问题,有点无语……
by o7u7o @ 2024-03-23 09:56:37