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 (≤), 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:

K​i​​: h​i​​[1] h​i​​[2] ... h​i​​[K​i​​]

where K​i​​ (>) is the number of hobbies, and [ 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

思路:

有n个人,每个人喜欢k个活动,如果两个人有任意一个活动相同,就称为他们处于同一个社交网络。求这n个人一共形成了多少个社交网络。

 
#include <bits/stdc++.h>
using namespace std;
int p[],a[];
int n,k,m,h;
char c;
bool cmp(int a,int b)
{
return a>b;
} int found(int x)
{
if(p[x] == x)
return x;
return found(p[x]);
}//found函数返回的是
void unite(int a,int b)
{
int x = found(a);
int y = found(b);
if(x!=y)
{
p[y] = x;
}
}//unite函数
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
p[i] = i;
for(int i=;i<=n;i++)
{
scanf("%d %c",&k,&c);
for(int j=;j<=k;j++)
{
scanf("%d",&h);
if(a[h] == )
{
a[h] = i;
}
else
{
unite(found(a[h]),i);
}
}
}
int cnt = ;
int count1[] = {};
for(int i=;i<=n;i++)
{
count1[found(i)]++;
}
for(int i=;i<=n;i++)
{
if(count1[i]!=)
cnt++;
}
cout<<cnt<<endl;
sort(count1+,count1+n+,cmp);
for(int i=;i<=cnt;i++)
{
if(i==)
cout<<count1[i];
else
cout<<" "<<count1[i];
}
return ;
}
 

最新文章

  1. CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用
  2. IOS-UIDynamic
  3. window共享linux下的文件 samba
  4. 学习C:程序
  5. Autodesk 最新开发技术研讨会-北京-上海-武汉-成都-西安-PPT下载
  6. PInvoke和Marshal的姿势
  7. [POJ2586]Y2K Accounting Bug
  8. Codeforces7C 扩展欧几里得
  9. WeUI—微信官方UI库
  10. delphi treeview 鼠标移动显示hint信息
  11. 由12306出错想到的div垂直居中的问题
  12. 找出最小的k个数
  13. 第24讲 UI_布局 之帧布局 表格布局 绝对布局
  14. 开发反模式 - SQL注入
  15. Redux-saga
  16. Linux之定时任务Crond使用
  17. Linux中的零拷贝技术
  18. jquery on绑定事件
  19. Confluence 6 workbox 通知包含了什么
  20. web端跨域调用webapi(转)

热门文章

  1. jQuery功能强大的图片查看器插件
  2. 网络直播流媒体协议的选择讨论,RTSP,RTMP,HTTP,私有协议?
  3. C++笔记之外部类访问内部类的私有成员
  4. MongoDB 学习五:索引
  5. 20170313 ABAP以jason 格式返回值到http(接口内容返回)
  6. Process &#39;command &#39;D:\AndroidSDK\ndk-bundle\ndk-build.cmd&#39;&#39; finished with non-zero exit value 2
  7. 解密阿里云Redis助力双十一背后的技术
  8. IC卡、ID卡、M1卡、射频卡的区别是什么
  9. SDUT OJ 进制转换
  10. 查询oracle数据库中的for update 中锁住的table表sql语句