zoukankan      html  css  js  c++  java
  • 1107. Social Clusters (30)

    When register on a social network, you are always asked to specify your hobbies in order to find some potential friends with the same hobbies. A "social cluster" is a set of people who have some of their hobbies in common. You are supposed to find all the clusters.

    Input Specification:

    Each input file contains one test case. For each test case, the first line contains a positive integer N (<=1000), the total number of people in a social network. Hence the people are numbered from 1 to N. Then N lines follow, each gives the hobby list of a person in the format:

    Ki: hi[1] hi[2] ... hi[Ki]

    where Ki (>0) is the number of hobbies, and hi[j] is the index of the j-th hobby, which is an integer in [1, 1000].

    Output Specification:

    For each case, print in one line the total number of clusters in the network. Then in the second line, print the numbers of people in the clusters in non-increasing order. The numbers must be separated by exactly one space, and there must be no extra space at the end of the line.

    Sample Input:

    8
    3: 2 7 10
    1: 4
    2: 5 3
    1: 4
    1: 3
    1: 4
    4: 6 8 1 5
    1: 4
    

    Sample Output:

    3
    4 3 1

     1 #include<stdio.h>
     2 #include<vector>
     3 #include<algorithm>
     4 #include<math.h>
     5 using namespace std;
     6 int ans[111][111];
     7 
     8 bool cmp(int a,int b)
     9 {
    10     return a > b;
    11 }
    12 
    13 struct node
    14 {
    15     vector<int> child;
    16 };
    17 
    18 node Tree[100100];
    19 
    20 int MIN = 100100;
    21 int cnt = 0;
    22 bool vis[1100];
    23 vector<int> Fun[1100];
    24 vector<int> stu[1100];
    25 void DFS(int root,int& sum)
    26 {
    27     for(int i = 0 ;i < stu[root].size();++i)
    28     {
    29         for(int k = 0 ;k < Fun[ stu[root][i] ].size();++k)
    30         {
    31             if(!vis[Fun[ stu[root][i] ][k]])
    32             {
    33                 ++sum;
    34                 vis[Fun[ stu[root][i] ][k]] = 1;
    35                 DFS(Fun[ stu[root][i] ][k],sum);
    36             }
    37         }
    38     }
    39 }
    40 
    41 
    42 int main()
    43 {
    44     int n,num,tem;
    45     double pri,rate;
    46     scanf("%d",&n);
    47     for(int i = 1 ;i <= n ;++i)
    48     {
    49         scanf("%d",&num);
    50         getchar();
    51         for(int k = 0 ;k < num;++k)
    52         {
    53             scanf("%d",&tem);
    54             Fun[tem].push_back(i);
    55             stu[i].push_back(tem);
    56         }
    57     }
    58     vector<int> vv;
    59     int cnt = 0;;
    60     for(int i = 1;i <= n ;++i)
    61     {
    62         if(!vis[i])
    63         {
    64             int sum = 0;
    65             ++cnt;
    66             DFS(i,sum);
    67             vv.push_back(sum);
    68         }
    69     }
    70     sort(vv.begin(),vv.end(),cmp);
    71     printf("%d
    ",vv.size());
    72     for(int i = 0 ;i < vv.size();++i)
    73     {
    74         if(i == 0) printf("%d",vv[0]);
    75         else printf(" %d",vv[i]);
    76     }
    77     printf("
    ");
    78     return 0;
    79 }
  • 相关阅读:
    Iso-seq 必备基础
    html 段落
    html 标题
    html 简介
    motiMaker 软件安装测试
    ggplot2 提取stat计算出来的数据
    R包 randomForest 进行随机森林分析
    AJAX应用【股票案例、验证码校验】
    Servlet第二篇【Servlet调用图、Servlet细节、ServletConfig、ServletContext】
    Servlet第一篇【介绍Servlet、HTTP协议、WEB目录结构、编写入门Servlet程序、Servlet生命周期】
  • 原文地址:https://www.cnblogs.com/xiaoyesoso/p/5220742.html
Copyright © 2011-2022 走看看