zoukankan      html  css  js  c++  java
  • 并查集——A1107.Social Clusters(30)

    #include <bits/stdc++.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <queue>
    using namespace std;
    const int N = 1010;
    int father[N];
    int isRoot[N] = {0};
    int course[N] = {0};
    int findFather(int x){
        int a = x;
        while(x != father[x]){
            x = father[x];
        }
        //路径压缩
        while(a != father[a]){
            int z = a;
            a = father[a];
            father[z] = x;
        }
        return x;
    }
    void Union(int a,int b){
        int faA = findFather(a);
        int faB = findFather(b);
        if(faA != faB){
            father[faA] = faB;
        }
    }
    void init(int n){
        for(int i=1;i<=n;++i){
            father[i] = i;
            isRoot[i] = false;
        }
    }
    bool cmp(int a,int b){
        return a > b;
    }
    int main(){
        int n,k,h;
        scanf("%d",&n);
        init(n);
        for(int i=1;i<=n;++i){
            scanf("%d",&k);
            for(int j = 0;j<k;++j){
                scanf("%d",&h);
                if(course[h] == 0){
                    course[h] = i;
                }
                Union(i,findFather(course[h]));
            }
        }
        for(int i=1;i<=n;++i){
            isRoot[findFather(i)]++;
        }
        int ans = 0;
        for(int i=1;i<=n;++i){
            if(isRoot[i] != 0){
                ans++;
            }
        }
        printf("%d
    ",ans);
        sort(isRoot+1,isRoot+n+1,cmp);
        for(int i=1;i<=ans;++i){
            printf("%d",isRoot[i]);
            if(i < ans){
                printf(" ");
            }
        }
        
        system("pause");
        return 0;
    }
  • 相关阅读:
    JSP第三章
    JSP第二章
    JSP第一章
    异常
    七种设计原则
    非泛型集合
    .NET第一章
    航班预定系统
    JSP数据交互(二)
    JSP数据交互(一)
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12247193.html
Copyright © 2011-2022 走看看