1107. Social Clusters (30)
来源:互联网 发布:linux c服务器端开发 编辑:程序博客网 时间:2024/06/15 15:59
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:83: 2 7 101: 42: 5 31: 41: 31: 44: 6 8 1 51: 4Sample Output:
34 3 1
#include <iostream>#include <algorithm>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <queue>#include <stack>using namespace std;bool comp(int a,int b){ return a>b;}int power[1010]={0};int book[1010]={0};int father[1010];int findRoot(int x)//找到集合的根{ while(x!=father[x]) { x=father[x]; } return x;}void init(int n)//初始化{ int i; for(i=1;i<=n;i++) father[i]=i;}void Union(int a,int b)//合并元素a,b所在的集合{ int roota,rootb; roota=findRoot(a); rootb=findRoot(b); father[roota]=rootb;}int main(){ //freopen("in.txt","r",stdin); int N; cin>>N; init(N); for(int i=1;i<=N;i++) { int k; scanf("%d:",&k); int j; for(j=1;j<=k;j++) { int h; cin>>h; if(book[h]==0) { book[h]=i; } else { Union(i,book[h]); } } } int cou=0; for(int i=1;i<=N;i++) { if(father[i]==i) cou++; } cout<<cou<<"\n"; for(int i=1;i<=N;i++) { int t=findRoot(i); power[t]++; } sort(power+1,power+1+N,comp); printf("%d",power[1]); for(int i=2;i<=cou;i++) { printf(" %d",power[i]); } return 0;}
笔记:
{
return a>b;
}
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 1107. Social Clusters (30)
- 【PAT】1107. Social Clusters (30)
- Android 手势 正则匹配图片
- Windows中,为开启了BitLocker的磁盘添加右键锁定菜单
- Java语言基础(八)
- Android
- 使用sort方法对数组进行排序(split()出现错误的解决)
- 1107. Social Clusters (30)
- Lesson04_python3之 列表(List)
- MySQL面试的经典试题
- 贝赛尔曲线时序问题
- hal HAL_FLASH_Program 擦除的问题
- 让未来的科技融入人文温度
- 数据库锁机制
- Tensorflow安装
- Leetcode 257 Binary Tree Paths