zoukankan      html  css  js  c++  java
  • 【PAT甲级】1107 Social Clusters (30分)(非递归并查集)

    题意:

    输入一个正整数N(<=1000),表示人数,接着输入N行每行包括一个他的爱好数量:和爱好的序号。拥有相同爱好的人们可以默认他们在同一个俱乐部,输出俱乐部的数量并从大到小输出俱乐部的人数(不同俱乐部的两个人的爱好一定不相同)。

    AAAAAccepted code:

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 vector<int>v[1007],st;
     5 int fa[1007];
     6 int a[1007];
     7 int find_(int x){
     8     int k,j,r;
     9     r=x;
    10     while(r!=fa[r])
    11         r=fa[r];
    12     k=x;
    13     while(k!=r){
    14         j=fa[k];
    15         fa[k]=r;
    16         k=j;
    17     }
    18     return r;
    19 }
    20 int main(){
    21     ios::sync_with_stdio(false);
    22     cin.tie(NULL);
    23     cout.tie(NULL);
    24     int n;
    25     cin>>n;
    26     st.resize(n+1);
    27     for(int i=1;i<=n;++i)
    28         fa[i]=i;
    29     for(int i=1;i<=n;++i){
    30         int x;
    31         cin>>x;
    32         cin.ignore();
    33         for(int j=1;j<=x;++j){
    34             int y;
    35             cin>>y;
    36             v[i].push_back(y);
    37         }
    38     }
    39     for(int i=1;i<=n;++i)
    40         for(auto it:v[i])
    41             if(!a[it])
    42                 a[it]=i;
    43             else{
    44                 int x=find_(i);
    45                 int y=find_(a[it]);
    46                 if(x!=y)
    47                     fa[x]=y;
    48             }
    49     for(int i=1;i<=n;++i)
    50         ++st[find_(i)];
    51     int cnt=0;
    52     for(int i=1;i<=n;++i)
    53         if(st[i])
    54             ++cnt;
    55     cout<<cnt<<"
    ";
    56     sort(st.rbegin(),st.rend());
    57     for(int i=0;i<cnt;++i){
    58         cout<<st[i];
    59         if(i<cnt-1)
    60             cout<<" ";
    61     }
    62     return 0;
    63 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    洛谷 P5043 树的同构 题解
    CF 1178E Archaeology 题解
    UVA 1642 MagicalGCD 题解
    洛谷 P3919 可持久化线段树 题解
    SPOJ 4003 Phone List 题解
    OI/ACM最全卡常大招
    洛谷 P3368 树状数组 题解
    逆序对
    洛谷 U78696 图书馆馆长的考验 题解
    原创 疲劳炉石传说
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11989030.html
Copyright © 2011-2022 走看看