문제의 의미
각 점은 통신 요청 블록 사이즈에 위치하고
사고
분리 된 세트와 각 지점에 대한 단순화 된 순위
암호
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
int n,m;
const int maxn=1e6+5;
int pre[maxn],erank[maxn];
int findPre(int x){
if(x!=pre[x])
pre[x]=findPre(pre[x]);
return pre[x];
}
void join(int x,int y){
int a=findPre(x);
int b=findPre(y);
if(a!=b){
if(erank[a]>=erank[b]){
erank[a]+=erank[b];
pre[b]=a;
}else{
erank[b]+=erank[a];
pre[a]=b;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
pre[i]=i;
erank[i]=1;
}
int k,x,y;
for(int i=1;i<=m;i++){
cin>>k;
if(k==0) continue;
cin>>x;
for(int i=1;i<k;i++){
cin>>y;
join(x,y);
}
}
for(int i=1;i<=n;i++)
cout<<erank[findPre(i)]<<" ";
cout<<endl;
return 0;
}
学如逆水行舟,不进则退