题意:简单的并查集 题意随便看,看样例就可
思路: 输出每个点所在集合的尺寸
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M = 5e5 + 5;
const ll mod = 1e9 + 7;
typedef pair<int, int> PII;
int n,m;
int a[M],p[M],siz[M];
int find(int x){
if(x!=p[x])p[x]=find(p[x]);
return p[x];
}
void Union(int x,int y){
int u=find(x);
int v=find(y);
if(u==v)return;
p[u]=v;
}
void solve()
{
cin>>n>>m;
for(int i=1;i<=n;i++)p[i]=i;
for(int i=1;i<=m;i++){
int k,x;cin>>k;
if(k>0){
cin>>x;
for(int j=2;j<=k;j++){
int r;cin>>r;
Union(x,r);
}
}
}
for(int i=1;i<=n;i++){
siz[p[i]=find(p[i])]++;
}
for(int i=1;i<=n;i++){
cout<<siz[p[i]]<<" ";
// cout<<siz[i]<<" ";
}
return;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t = 1;
// cin >> t;
while (t--)
{
solve();
}
return 0;
}