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. swack的wiki站上线

    swack的个人wiki网址:www.swack.cn [服务器破旧,速度较慢,见谅!]

  2. 【Flutter】容器类组件之变换

    前言 Transform可以在其子组件绘制时对其应用一些矩阵变换来实现一些特效. 接口描述 const Transform({ Key key, @required this.transform, t ...

  3. Java线程安全与锁优化,锁消除,锁粗化,锁升级

    线程安全的定义 来自<Java高并发实战>"当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法的时候进行任何 ...

  4. requests基础封装-get/post封装

     字符串转化成字典: convert_to_dict.py: import jsonstr1 = '{"grant_type":"client_credential&qu ...

  5. 没搞清楚网络I/O模型?那怎么入门Netty

    微信搜索[阿丸笔记],关注Java/MySQL/中间件各系列原创实战笔记,干货满满. 本文是Netty系列笔记第二篇 Netty是网络应用框架,所以从最本质的角度来看,是对网络I/O模型的封装使用. ...

  6. 入门OJ:扫雪

    扫雪1 题目描述 大雪履盖了整个城市,市政府要求冬季服务部门尽快将一些街道(列在一份清单中)的积雪清除掉以恢复交通,整个城市由许多交叉路口和街道构成,当然任意两个交叉路口都是直接或间接连通的,清单给出 ...

  7. Py变量,递归,作用域,匿名函数

    局部变量与全局变量 全局变量:全局生效的变量,在顶头的,无缩进的定义的变量. 局部变量:函数内生效的变量,在函数内定义的变量. name='1fh' def changename(): name='s ...

  8. QQ刷屏助手

    本人小学生,求大佬轻点儿 制作原因 原因很简单,还不是想报仇呗! 代码 1 # 原理是先将需要发送的文本放到剪贴板中,然后将剪贴板内容发送到qq窗口 2 # 之后模拟按键发送enter键发送消息 3 ...

  9. Vue 标签Style 动态三元判断绑定

    <div  :style=" 1==1 ? 'display:block' : 'display:none' "></div> v-bind:style 的 ...

  10. 利用powershell隐藏执行后门

    运行后门时,有些后门不能中断.双击运行这种后门会产生一个黑框. 一条命令就能使其在后台执行 命令解释: start-process启动一个进程 -windowstyle窗口样式 hidden隐藏