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 ...
随机推荐
- Jenkins定时任务的配置
在任务配置中,在 构建触发器(Build Triggers)-->勾选"定时构建"-->在输入框中配置触发时间表达式 以上配置,类似cron表达式,表示在5月27日23 ...
- 微信小程序不同机型的兼容布局解决
因为小程序是以微信为平台运行的,可以同时运行在android与ios的设备上,所以不可避免的会遇到布局适配问题,特别是在iphone5上,因为屏幕尺寸小的缘故,也是适配问题最多的机型,下面就简单介绍几 ...
- Error-JavaScript:SCRIPT1007: 缺少 ']'
ylbtech-Error-JavaScript:SCRIPT1007: 缺少 ']' SCRIPT1007: 缺少 ']' 1.返回顶部 · if (flag) { return eval(&quo ...
- 手动卸载wine-stable卸载
装了wine发现运行TIM全都乱码,于是手动卸载wine: 删除文件:(参考https://blog.csdn.net/taizhoufox/article/details/5496568) ~/.w ...
- 【转载】 clusterdata-2011-2 谷歌集群数据分析(一)
原文地址: https://blog.csdn.net/yangss123/article/details/78298679 由于原文声明其原创文章不得允许不可转载,故这里没有转载其正文内容. --- ...
- windows nginx重启脚本.bat
在nginx.exe目录下新建txt文件写入 @echo offtaskkill /f /fi "IMAGENAME eq nginx.exe"start nginx.exe#pa ...
- Spring cloud微服务安全实战-3-3 API安全机制之流控
首先要保证你的服务是可用的,其中一个重要的手段就是流控.就是流量控制.比如我的系统每秒只能处理500个请求,那么多余的请求就拒绝掉.这样我的系统不会被压死 实际的开发中,所要面对的流控场景实际是非常复 ...
- Spring Boot与Redis的集成
Redis是一个完全开源免费的.遵守BSD协议的.内存中的数据结构存储,它既可以作为数据库,也可以作为缓存和消息代理.因其性能优异等优势,目前已被很多企业所使用,但通常在企业中我们会将其作为缓存来使用 ...
- ecshop添加商品筛选功能
ecshop商品属性一直是使用问题的难点,而“属性筛选”更是ecshop属性中的难点,那么下面来详细说明一下 属性筛选功能 第一,属性筛选的特点: 属性筛选必须是分类页才会显示,列出所有商品的唯一属性 ...
- HTML:给body增加全屏的背景图
只需要在head中增加如下代码即可 <head> {#设置背景#} <style> body { height: 100%;width: 100%; background: u ...