• 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 }
  • 相关阅读:
    猜拳游戏GuessGame源码
    基于vitamio的网络电视直播源码
    EarthWarrior3D游戏ios源码
    类似material design的电影应用源码
    四季电台应用项目源码
    高仿一元云购IOS应用源码项目
    非常不错的点餐系统应用ios源码完整版
    仿哔哩哔哩应用客户端Android版源码项目
    《你最美》换发型应用源码
    最新win7系统64位和32位系统Ghost装机稳定版下载
  • 原文地址:https://www.cnblogs.com/xiaoyesoso/p/5220742.html
Copyright © 2020-2023  润新知