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 (≤), 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 (>) 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 ;
}
最新文章
- CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用
- IOS-UIDynamic
- window共享linux下的文件 samba
- 学习C:程序
- Autodesk 最新开发技术研讨会-北京-上海-武汉-成都-西安-PPT下载
- PInvoke和Marshal的姿势
- [POJ2586]Y2K Accounting Bug
- Codeforces7C 扩展欧几里得
- WeUI—微信官方UI库
- delphi treeview 鼠标移动显示hint信息
- 由12306出错想到的div垂直居中的问题
- 找出最小的k个数
- 第24讲 UI_布局 之帧布局 表格布局 绝对布局
- 开发反模式 - SQL注入
- Redux-saga
- Linux之定时任务Crond使用
- Linux中的零拷贝技术
- jquery on绑定事件
- Confluence 6 workbox 通知包含了什么
- web端跨域调用webapi(转)
热门文章
- jQuery功能强大的图片查看器插件
- 网络直播流媒体协议的选择讨论,RTSP,RTMP,HTTP,私有协议?
- C++笔记之外部类访问内部类的私有成员
- MongoDB 学习五:索引
- 20170313 ABAP以jason 格式返回值到http(接口内容返回)
- Process &#39;command &#39;D:\AndroidSDK\ndk-bundle\ndk-build.cmd&#39;&#39; finished with non-zero exit value 2
- 解密阿里云Redis助力双十一背后的技术
- IC卡、ID卡、M1卡、射频卡的区别是什么
- SDUT OJ 进制转换
- 查询oracle数据库中的for update 中锁住的table表sql语句