PAT (Advanced Level) Practise 1107 Social Clusters (30)
来源:互联网 发布:千牛mac版 编辑:程序博客网 时间:2024/05/16 18:15
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
题意:有n个人,每个人有k个爱好,有相同爱好的为一类,问一共有几类,每类各有多少人
解题思路:把每个爱好分配给一个人,相同爱好的人用并查集合并一下
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <cmath>#include <map>#include <set>#include <stack>#include <queue>#include <vector>#include <bitset>using namespace std;#define LL long longconst int INF = 0x3f3f3f3f;int n,f[1005],vis[1005],cnt[1005];int k,a;int Find(int x){ return f[x]==x?x:f[x]=Find(f[x]);}int main(){ while(~scanf("%d",&n)) { for(int i=1;i<=n;i++)f[i]=i; memset(vis,0,sizeof vis); memset(cnt,0,sizeof cnt); for(int i=1;i<=n;i++) { scanf("%d:",&k); for(int j=1;j<=k;j++) { scanf("%d",&a); if(!vis[a]) vis[a]=i; else { int aa=Find(i); int bb=Find(vis[a]); if(aa!=bb) f[aa]=bb; } } } int sum=0; for(int i=1;i<=n;i++) { if(f[i]==i) sum++; int aa=Find(i); cnt[aa]++; } sort(cnt+1,cnt+1+n,greater<int>()); printf("%d\n%d",sum,cnt[1]); for(int i=2;i<=sum;i++) printf(" %d",cnt[i]); printf("\n"); } return 0;}
- PAT (Advanced Level) Practise 1107Social Clusters (30)
- PAT (Advanced Level) Practise 1107 Social Clusters (30)
- 【PAT】【Advanced Level】1107. Social Clusters (30)
- PAT (Advanced Level) Practise 1107. Social Clusters (30) 并查集
- PAT 1107 Social Clusters
- [PAT] (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise
- PAT (Advanced Level) Practise 1057 Stack (30)
- PAT (Advanced Level) Practise 1057 Stack (30)
- 【PAT】1107. Social Clusters (30)
- dubbox -- 服务的启动与初始化
- Android 生意圈简介
- 阿里云服务器开发微信公众号,配置的时候总是TOKEN验证失败
- MySQL存储过程详解 mysql 存储过程
- 和为k的连续区间(mp+前缀和) 51nod1094
- PAT (Advanced Level) Practise 1107 Social Clusters (30)
- 【作业】算法概论课后证明题8.14
- SqEl基础表达式1
- linux的一些基础操作
- PAT (Advanced Level) Practise 1106 Lowest Price in Supply Chain(25)
- VS2010 C# 如何连接Oracle 11g数据库
- Spring Boot实战之Spring项目的搭建
- 实习报告
- RecyclerView 显示底部,滚动底部(无动画)