GPLT L2-024 部落 (并查集)
N ≤ 104,输入如下数据如果没有路径压缩可能会超时。
10000
2 1 2
2 3 4
2 5 6
……
2 9997 9998
2 9999 10000
2 9999 9997
……
2 5 3
2 3 1
10000
10000 10000
……
10000 10000
但事实上,两种写法的运行时间都为 50ms 左右。
${O_{\left( n^2/2 \right)}}$:
#include <bits/stdc++.h>
using namespace std; const int M=11000; int fri[M];
bool vis[M]; int Find(int x){
while(x!=fri[x]) x=fri[x];
return x;
} void Union(int A,int B){
int friA=Find(A);
int friB=Find(B);
if(friA>friB) fri[friA]=friB;
if(friB>friA) fri[friB]=friA;
} int main()
{
for(int i=0;i<M;i++) fri[i]=i;
int n;cin>>n;
for(int i=0;i<n;i++){
int k;cin>>k;
int a[k];
for(int j=0;j<k;j++){
cin>>a[j];
vis[a[j]]=true;
if(j) Union(a[j],a[j-1]);
}
}
int people=0,tribe=0;
for(int i=0;i<M;i++){
if(vis[i]) ++people;
if(vis[i]&&fri[i]==i) ++tribe;
}
cout<<people<<" "<<tribe<<"\n";
int q;cin>>q;
for(int i=0;i<q;i++){
int a,b;cin>>a>>b;
cout<<(Find(a)==Find(b)?"Y":"N")<<"\n";
}
return 0;
}
${O_{\left( n \right)}}$:
#include <bits/stdc++.h>
using namespace std; const int M=11000; int fri[M];
bool vis[M]; int Find(int x){
int f=x;
while(f!=fri[f]) f=fri[f];
int a=x,b;
while(a!=fri[a]) b=fri[a],fri[a]=f,a=b;
return f;
} void Union(int A,int B){
int friA=Find(A);
int friB=Find(B);
if(friA>friB) fri[friA]=friB;
if(friB>friA) fri[friB]=friA;
} int main()
{
for(int i=0;i<M;i++) fri[i]=i;
int n;cin>>n;
for(int i=0;i<n;i++){
int k;cin>>k;
int a[k];
for(int j=0;j<k;j++){
cin>>a[j];
vis[a[j]]=true;
if(j) Union(a[j],a[j-1]);
}
}
int people=0,tribe=0;
for(int i=0;i<M;i++){
if(vis[i]) ++people;
if(vis[i]&&fri[i]==i) ++tribe;
}
cout<<people<<" "<<tribe<<"\n";
int q;cin>>q;
for(int i=0;i<q;i++){
int a,b;cin>>a>>b;
cout<<(Find(a)==Find(b)?"Y":"N")<<"\n";
}
return 0;
}
GPLT L2-024 部落 (并查集)的更多相关文章
- PAT 天梯赛 L2-024. 部落 【并查集】
题目链接 https://www.patest.cn/contests/gplt/L2-024 题意 给出 几个不同的圈子,然后 判断 有哪些人 是属于同一个部落的,或者理解为 ,有哪些人 是有关系的 ...
- 【BZOJ1821】[JSOI2010]部落划分(二分,并查集)
[BZOJ1821][JSOI2010]部落划分(二分,并查集) 题面 BZOJ 洛谷 题解 二分答案,把距离小于二分值的点全部并起来,\(\mbox{check}\)一下是否有超过\(K\)个集合就 ...
- 天梯赛 L2-024. (并查集) 部落
题目链接 题目描述 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查 ...
- BZOJ1821:[JSOI2010]部落划分(并查集,二分)
Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...
- BZOJ 1821 部落划分(二分+并查集)
答案是具有单调性的. 因为最近的两个部落的距离为mid,所以要是有两个野人的距离<mid,则他们一定是一个部落的. 用并查集维护各联通块,如果最后的联通块个数>=k,那么mid还可以再小点 ...
- [Bzoj1821][JSOI2010]Group 部落划分 Group(并查集)(二分答案)
1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2949 Solved: 1392[S ...
- bzoj [JSOI2010]Group 部落划分 Group【二分+并查集】
我是zz吗这么简单都写错-- 一眼二分,然后判断的话是枚举点,然后计算这个点到已有联通块的最小距离,如果这个点到一些联通块的距离小于当前二分的val,则把这些联通块合并起来,这里用并查集维护,最后看这 ...
- P4047 [JSOI2010]部落划分 并查集
思路:并查集+生成树 提交:2次(虽然样例都没过但感觉是对的$QwQ$(判边少了一条)) 题解: 把所有点之间连边,然后$sort$一遍,从小往大加边,直到连第$n-k+1$条边(相当于是破话$k$个 ...
- GPLT L2-007 家庭房产 (并查集)
题意: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 思路: 输入和输出各构造一个结构体,利用并查集归并输入,枚举编号进行输出. #include &l ...
- 【BZOJ-4569】萌萌哒 ST表 + 并查集
4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 459 Solved: 209[Submit][Status] ...
随机推荐
- php 去除路由中index.php 通过 .htaccess 文件
首先在入口文件index.php得的当前目录下 创建 .htaccess文件. 然后将下面一段代码放进去: <IfModule mod_rewrite.c> RewriteEngine o ...
- python -c 妙用
前言 python -c 命令还是有用的哈 正文 python的 -c 可以在命令行中调用 python 代码, 实际上 -c 就是 command 的意思 官方文档中解释为(节选自: python ...
- uber_go_guide解析(二)
前言 接上回 正文 错误消息 Go中声明错误有几种方式 errors.New() 简单的声明静态字符串信息的错误 fmt.Errorf 可以格式化插入信息的错误 自己实现 Error() 方法 使用e ...
- 10步写了个Django网站,正经网站···
Django做网站只要10步,真的只有10步,不信?咱们来数数-- 今天主要讲解用Pycharm编辑器搭建网站,网站功能是 实现在局域网中快速传递大文件! 比如:同事要给你个1G的文件,你丢一 ...
- Writing in the science: Introducion
1.what makes a good writing? 2.what makes a good writer? 1) have something to say 2) logical thinkin ...
- FlatBuffers使用小结
最近做一个Android APP,由于离线业务需求,需要在启动APP时候同步大量数据到APP上,遇到了JSON性能瓶颈.从下方的图片中可以看出,当使用 json 传输数据,在解析json的时候会产生大 ...
- 安装MySQL数据库(在Windows下通过zip压缩包安装)
安装MySQL 这里建议大家使用压缩版,安装快,方便.不复杂. 软件下载 mysql5.7 64位下载地址: https://dev.mysql.com/get/Downloads/MySQL-5.7 ...
- 【ASM】asm从共享磁盘复制到本地磁盘中
将ASM里面的文件copy到文件系统 数据文件存放在ASM里面查看不是很直观,有时候需要把文件从ASM里面copy到文件系统.我记录了一下两种方法,还有一种用AMDU,ODU也可以实现 1. 直接在a ...
- C语言变量
C语言变量 任何一种编程语言都离不开变量,特别是数据处理型程序,变量的使用非常频繁,没有变量参与程序甚至无法编制,即使编制运行后的意义也不大.变量之所以重要,是因为变量是编程语言中数据的符号标识和载体 ...
- 基于.NET Core的优秀开源项目合集
开源项目非常适合入门,并且可以作为体系结构参考的好资源, GitHub中有几个开源的.NET Core项目,这些项目将帮助您使用不同类型的体系结构和编码模式来深入学习 .NET Core技术, 本文列 ...