• 天梯赛 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 }
  • 相关阅读:
    9ch
    thymeleaf 的使用(三)--举例使用
    thymeleaf 的使用(二)--基本语法
    thymeleaf 的使用(一)--导入和基本操作
    SpringBoot对静态资源的映射规则
    第一个Spring Boot项目
    HTML文本换行问题
    判断for(var i=0;i<=3;i++){ setTimeout(function() { console.log(i) }, 10) }
    js的执行机制——宏任务和微任务
    v-if 和 v-show 的区别
  • 原文地址:https://www.cnblogs.com/Xycdada/p/8576942.html
Copyright © 2020-2023  润新知