PAT-1107 Social Clusters (30 分) 并查集模板
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:
K**i: h**i[1] h**i[2] ... h**i[K**i]
where K**i (>0) is the number of hobbies, and h**i[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
题目大意:有n个人,每个人喜欢k个活动,如果两个人有任意一个活动相同,就称为他们处于同一个社交网络。求这n个人一共形成了多少个社交网络。
第一个喜欢这个活动的称为教主,之后喜欢这个活动的人和教主unite即可.
1.并查集写错了,返回一个等号写成了两个等号.
2.找每组属于谁的时候可能还没有压缩路径,所以应该统计find(i)而不是par[i],,找分为几组的时候才可以用par[i]==i
#include <iostream>
#include<bits/stdc++.h>
#define each(a,b,c) for(int a=b;a<=c;a++)
#define de(x) cout<<#x<<" "<<(x)<<endl
using namespace std;
const int maxn=1000+5;
const int inf=0x3f3f3f3f;
int par[maxn];
int Rank[maxn];
int jiaozhu[maxn];
multiset<int>MS;
void init(int n)
{
for(int i=1;i<=n;i++)///初始化小错误
{
par[i]=i;
Rank[i]=0;
}
}
int find(int x)
{
return par[x]==x?x:par[x]=find(par[x]);///并查集的父节点满足par[x]==x,如果不是的话也要把par[x]更新,返回的是find(par[x])同时进行了路径的压缩
}
priority_queue<int>Q;
void unite(int x,int y)
{
//de(x);
//de(y);
x=find(x);
y=find(y);
if(x==y)return;
if(Rank[x]<Rank[y])
{
par[x]=y;///军衔小,认y当爹
}
else
{
par[y]=x;
if(Rank[x]==Rank[y])Rank[x]++;///本来是兄弟,x却当了爹
}
}
int root_cnt[maxn];
/**
8
3: 2 7 10
1: 4
2: 5 3
1: 4
1: 3
1: 4
4: 6 8 1 5
1: 4
*/
int ans[maxn];
int cur=0;
int cmp(int a,int b){return a>b;}
int main()
{
int n;
scanf("%d",&n);
init(n);
cur=0;
each(i,1,n)
{
int k;
scanf("%d: ",&k);
while(k--)
{
int temp;
scanf("%d",&temp);
if(jiaozhu[temp]==0)
{
jiaozhu[temp]=i;
}
else
{
unite(jiaozhu[temp],i);
}
}
}
each(i,1,n)
{
root_cnt[find(i)]++;
}
for(int i=1;i<=n;i++)
{
if(root_cnt[i]!=0)
{
ans[cur++]=root_cnt[i];
}
}
sort(ans,ans+cur,cmp);
printf("%d\n",cur);
each(i,0,cur-1)
{
printf("%d",ans[i]);
printf(i==cur-1?"\n":" ");
}
}
PAT-1107 Social Clusters (30 分) 并查集模板的更多相关文章
- 【PAT甲级】1107 Social Clusters (30分)(非递归并查集)
题意: 输入一个正整数N(<=1000),表示人数,接着输入N行每行包括一个他的爱好数量:和爱好的序号.拥有相同爱好的人们可以默认他们在同一个俱乐部,输出俱乐部的数量并从大到小输出俱乐部的人数( ...
- [并查集] 1107. Social Clusters (30)
1107. Social Clusters (30) When register on a social network, you are always asked to specify your h ...
- PAT甲题题解-1107. Social Clusters (30)-PAT甲级真题(并查集)
题意:有n个人,每个人有k个爱好,如果两个人有某个爱好相同,他们就处于同一个集合.问总共有多少个集合,以及每个集合有多少人,并按从大到小输出. 很明显,采用并查集.vis[k]标记爱好k第一次出现的人 ...
- 1107 Social Clusters (30)(30 分)
When register on a social network, you are always asked to specify your hobbies in order to find som ...
- pat甲级 1107. Social Clusters (30)
When register on a social network, you are always asked to specify your hobbies in order to find som ...
- PAT (Advanced Level) 1107. Social Clusters (30)
简单并查集. #include<cstdio> #include<cstring> #include<cmath> #include<vector> # ...
- PAT 1107 Social Clusters
When register on a social network, you are always asked to specify your hobbies in order to find som ...
- 1053 Path of Equal Weight (30分)(并查集)
Given a non-empty tree with root R, and with weight Wi assigned to each tree node Ti. The weig ...
- 1107. Social Clusters (30)
When register on a social network, you are always asked to specify your hobbies in order to find som ...
随机推荐
- 扩展和嵌入 Python 解释器 用 C 或 C++ 编写模块以使用新模块来扩展 Python 解释器的功能 定义新的函数\对象类型\方法。 将 Python 解释器嵌入到另一个应用程序中
// https://python3-cookbook.readthedocs.io/zh_CN/latest/c15/p02_write_simple_c_extension_module.html ...
- 在input内添加小图标或文字(元/月)等
文字: <td class="formValue"> <div class="input-group"> <input id=&q ...
- Springboot配置文件获取系统环境变量的值
注意,这里说的是获取系统环境变量的值,譬如Windows里配置的JAVA_HOME之类的,可以直接在Springboot的配置文件中获取. 我们经常使用一些docker管理平台,如DaoCloud.r ...
- Xamarin图表开发基础教程(2)OxyPlot框架
Xamarin图表开发基础教程(2)OxyPlot框架 OxyPlot图表设计 OxyPlot是一个基于.Net的跨平台图表库.该图表库也支持Xamarin应用开发.该组件支持多种类型的图表.本章将主 ...
- 移动端IM系统的协议选型:UDP还是TCP?(转)
源: 移动端IM系统的协议选型:UDP还是TCP?
- linux下apache安装ssl步骤
制作证书: 参考:linux下运用opensll制作ssl证书 生成三个证书 server.crt .server-ca.crt.server.key 安装openssl tar -xzvf open ...
- Python的开源人脸识别库:离线识别率高达99.38%(附源码)
Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073 11.11 智慧上云 ...
- VS2019及其他多个版本序列号和安装包
Visual Studio2019序列号Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DFVisual Studio 2019 Pro ...
- 反射load,loadfile,LoadFrom区别
反射加载数据用法 Load Assembly assembly = Assembly.Load("Ruanmou.DB.MySql");//dll名称无后缀 从当前目录加载dll ...
- 安卓 android studio 报错 Unknown host 'jcenter.bintray.com'. You may need to adjust the proxy settings in Gradle.
报错截图: 问题原因:因为build.gradle中jcenter()或者maven()被墙了,所以会出现这种情况. 解决方案:(我的gradle版本是:classpath 'com.android. ...