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 部落 (并查集)的更多相关文章

  1. PAT 天梯赛 L2-024. 部落 【并查集】

    题目链接 https://www.patest.cn/contests/gplt/L2-024 题意 给出 几个不同的圈子,然后 判断 有哪些人 是属于同一个部落的,或者理解为 ,有哪些人 是有关系的 ...

  2. 【BZOJ1821】[JSOI2010]部落划分(二分,并查集)

    [BZOJ1821][JSOI2010]部落划分(二分,并查集) 题面 BZOJ 洛谷 题解 二分答案,把距离小于二分值的点全部并起来,\(\mbox{check}\)一下是否有超过\(K\)个集合就 ...

  3. 天梯赛 L2-024. (并查集) 部落

    题目链接 题目描述 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查 ...

  4. BZOJ1821:[JSOI2010]部落划分(并查集,二分)

    Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗.只是,这一切都成 ...

  5. BZOJ 1821 部落划分(二分+并查集)

    答案是具有单调性的. 因为最近的两个部落的距离为mid,所以要是有两个野人的距离<mid,则他们一定是一个部落的. 用并查集维护各联通块,如果最后的联通块个数>=k,那么mid还可以再小点 ...

  6. [Bzoj1821][JSOI2010]Group 部落划分 Group(并查集)(二分答案)

    1821: [JSOI2010]Group 部落划分 Group Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2949  Solved: 1392[S ...

  7. bzoj [JSOI2010]Group 部落划分 Group【二分+并查集】

    我是zz吗这么简单都写错-- 一眼二分,然后判断的话是枚举点,然后计算这个点到已有联通块的最小距离,如果这个点到一些联通块的距离小于当前二分的val,则把这些联通块合并起来,这里用并查集维护,最后看这 ...

  8. P4047 [JSOI2010]部落划分 并查集

    思路:并查集+生成树 提交:2次(虽然样例都没过但感觉是对的$QwQ$(判边少了一条)) 题解: 把所有点之间连边,然后$sort$一遍,从小往大加边,直到连第$n-k+1$条边(相当于是破话$k$个 ...

  9. GPLT L2-007 家庭房产 (并查集)

    题意: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 思路: 输入和输出各构造一个结构体,利用并查集归并输入,枚举编号进行输出. #include &l ...

  10. 【BZOJ-4569】萌萌哒 ST表 + 并查集

    4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 459  Solved: 209[Submit][Status] ...

随机推荐

  1. ArrayList源码解析--值得深读

    ArrayList源码解析 基于jdk1.8 ArrayList的定义 类注释 允许put null值,会自动扩容: size isEmpty.get.set.add等方法时间复杂度是O(1): 是非 ...

  2. 【Java】运算符(算术、赋值、比较(关系)、逻辑、条件、位运算符)

    运算符 文章目录 运算符 1. 算术运算符 2. 赋值运算符 3. 比较运算符 4. 逻辑运算符 5. 条件运算符 6. 位运算符 7. 运算符优先级 8. 运算符操作数类型说明 9.code 算术运 ...

  3. mysql中的kill

    show processlist;查看id, 然后 kill id ; 就行了.

  4. Nginx(六):配置解析之location解析

    nginx成为非常流行的代理服务软件,最根本的原因也许是在于其强悍性能.但还有一些必要的条件,比如功能的完整,配置的易用,能够解决各种各样的实际需求问题,这些是一个好的软件的必备特性. 那么,今天我们 ...

  5. druid discard long time none received connection问题解析

    最新项目中用的druid连接数据库遇到一个困扰很久的问题 1 开始用的druid版本是1.1.22版本,由于业务需求,单个连接需要执行很久,理论上不需要用到自动回收,但为了安全,还是加了自动回收,时间 ...

  6. REUSE_ALV_FIELDCATALOG_MERGE函数

    今天使用REUSE_ALV_FIELDCATALOG_MERGE函数,就是获取不到fieldcat, 搞了半天才发现,原来参数要全部大写才行!!小写字符就是获取不到,唉,悲哀...

  7. SAP 中session和外部断点设置的区别

    1 Session Breakpoints:只在当前user session的所有main session中有效 2 External Breakpoints 在abap editor或事务SICF中 ...

  8. Spring入门及IoC的概念

    Spring入门 Spring是一个轻量级的Java开发框架,最早由Robd Johnson创建,目的为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题,它是一个分层的JavaSE/EE轻量级开源 ...

  9. uni-app通过canvas实现手写签名

    分享一个uni-app实现手写签名的方法 具体代码如下: <template> <view > <view class="title">请在下面 ...

  10. TCP服务器程序

    Linux下编写TCP服务器调用的函数顺序为:socket -> bind -> listen -> accept -> recv/send socket 参见:http:// ...