교육 Codeforces 라운드 65 (사업부 정격 2.), 문제 : (C) 뉴스 유통 【并 查 集】

문제의 의미

각 점은 통신 요청 블록 사이즈에 위치하고

사고

분리 된 세트와 각 지점에 대한 단순화 된 순위

암호

#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;
}
学如逆水行舟,不进则退
게시 된 411 개 원래 기사 · 원 찬양 962 · 전망 130 000 +

추천

출처blog.csdn.net/weixin_42429718/article/details/104102399