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 aint b){
    int root_a= root(a);
    int root_b=root(b);
    if(root_a==root_breturn;
    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 nodesno_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