NEWS DISTRIBUTION CODEFORCES
#include<bits/stdc++.h>
using namespace std;
int const N=5e5+2;
int arr[N]={0}, size[N]={0};
void initialise(int nodes){
for(int i=0;i<=nodes;i++){
arr[i]=i;
size[i]=1;
}
return;
}
int root(int i){
while(i!=arr[i]){
i=arr[i];
}
return i;
}
void wunion(int a, int b){
int root_a= root(a);
int root_b=root(b);
if(root_a==root_b) return;
if(size[root_a]>size[root_b]){
arr[root_b]=root_a;
size[root_a]+=size[root_b];
size[root_b]=0;
}
else{
arr[root_a]=root_b;
size[root_b]+=size[root_a];
size[root_a]=0;
}
}
int main() {
int nodes, no_grps;
cin>>nodes>>no_grps;
initialise(nodes);
for(int i=0;i<no_grps;i++){
int no_members;
cin>>no_members;
int temp[no_members];
for(int j=0;j<no_members;j++){
cin>>temp[j];
}
for(int j=0;j<no_members-1;j++){
wunion(temp[j],temp[j+1]);
}
}
for(int i=1;i<=nodes;i++){
cout<<size[root(i)]<<" \n"[i==nodes];
}
return 0;
}
Comments
Post a Comment