zoukankan      html  css  js  c++  java
  • 天梯赛 L3-003. 社交集群

    并查集,以人为节点,用set来存每个人的兴趣,输入第i个人的兴趣时,如果在前i个人的兴趣里找得到,就将两个人合并。

     1 #include<iostream>
     2 #include<string>
     3 #include<stdio.h>
     4 #include<string.h>
     5 #include<algorithm>
     6 #include<set>
     7 #include<queue>
     8 #include<map>
     9 #include<vector>
    10 #define MAX_N 1005
    11 #define ll long long
    12 
    13 using namespace std;
    14 
    15 int n;
    16 int root[MAX_N];
    17 set<int> ss[MAX_N];
    18 int ans[MAX_N];
    19 void init()
    20 {
    21     for(int i = 0; i < MAX_N; i++)
    22         root[i] = i,ans[i] = 1;
    23 }
    24 int findFather(int x)
    25 {
    26     if(root[x]==x)
    27         return x;
    28     return findFather(root[x]);
    29 }
    30 
    31 void merge(int x, int y)
    32 {
    33     int xx = findFather(x);
    34     int yy = findFather(y);
    35     
    36     if(xx!=yy)
    37     {
    38         root[yy] = xx;
    39         ans[xx]+=ans[yy];
    40         ans[yy] = 0;
    41     }
    42 }
    43 bool cmp(int a,int b)
    44 {
    45     return a>b;
    46 }
    47 int main()
    48 {
    49     init();
    50     scanf("%d",&n);
    51     int k,temp;
    52     for(int i = 1; i <= n; i++)
    53     {
    54         scanf("%d:",&k);
    55         for(int j = 1; j <= k; j++)
    56         {
    57             scanf("%d",&temp);
    58             ss[i].insert(temp);
    59             for(int k = 1; k < i; k++)
    60             {
    61                 if(ss[k].find(temp) != ss[k].end())
    62                 {
    63                     merge(i,k);
    64                 }
    65             }
    66         }
    67     }
    68     sort(ans+1,ans+n+1,cmp);
    69     
    70     int con = 0;
    71     for(int i = 1; i <= n; i++)
    72     {
    73         if(ans[i])
    74             con++;
    75         else
    76             break;
    77     }
    78     printf("%d
    ",con);
    79     for(int i = 1; i < con; i++)
    80         printf("%d ",ans[i]);
    81     printf("%d
    ",ans[con]);
    82     return 0;
    83 }
  • 相关阅读:
    MSSQL 事务说明
    创业课堂之团队
    如何开发HTML编辑器
    IE和Firefox对Documnet,iframe的处理
    jQuery控制iFrame
    如何更高效的制作可通用的HTML页面
    天下武功,无坚不破,唯快不破
    Flash本地通讯
    播放本地MP3 (二)
    播放本地MP3 (一)
  • 原文地址:https://www.cnblogs.com/Xycdada/p/8576942.html
Copyright © 2011-2022 走看看