[bzoj2733][线段树合并][并查集]永无乡

如何搭建pikachu靶场 Pikachu靶场本地搭建指南 下载安装PHPStudy并启动Apache/MySQL服务 获取Pikachu靶场源码并解压到网站根目录 配置数据库连接信息(修改config.inc.php文件) 创建pikachu数据库(用户名/密码设为root) 访问http://localhost/pikachu测试功能 常见问题:数据库连接失败需检查服务状态和配置信息,页面报错需检查PHP版本兼容性。建议使用PHP7.3/7.4版本,在隔离环境中搭建使用。 (150字) 阅读详情

Description

永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n
来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛。如果从岛 a 出发经过若干座(含 0 座)桥可以到达岛 b,则称岛 a
和岛 b 是连 通的。现在有两种操作:B x y 表示在岛 x 与岛 y 之间修建一座新桥。Q x k 表示询问当前与岛 x连通的所有岛中第
k 重要的是哪座岛,即所有与岛 x 连通的岛中重要度排名第 k 小的岛是哪 座,请你输出那个岛的编号。

Input

输入文件第一行是用空格隔开的两个正整数 n 和 m,分别 表示岛的个数以及一开始存在的桥数。接下来的一行是用空格隔开的 n
个数,依次描述从岛 1 到岛 n 的重要度排名。随后的 m 行每行是用空格隔开的两个正整数 ai 和 bi,表示一开始就存 在一座连接岛
ai 和岛 bi 的桥。后面剩下的部分描述操作,该部分的第一行是一个正整数 q, 表示一共有 q 个操作,接下来的 q
行依次描述每个操作,操作的格式如上所述,以大写字母 Q 或B 开始,后面跟两个不超过 n 的正整数,字母与数字以及两个数字之间用空格隔开。
对于 20%的数据 n≤1000,q≤1000 对于 100%的数据 n≤100000,m≤n,q≤300000

Output

对于每个 Q x k 操作都要依次输出一行,其中包含一个整数,表 示所询问岛屿的编号。如果该岛屿不存在,则输出-1。

Sample Input

5 1

4 3 2 5 1

1 2

7

Q 3 2

Q 2 1

B 2 3

B 1 5

Q 2 1

Q 2 4

Q 2 3

Sample Output

-1

2

5

1

2

题解

之前太弱了以为要写Splay合并。。
然后今天看了一眼就发现原来只是一个线段树合并
用一个并查集维护一下连通性
然后启发式合并
没了

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
int fa[110000],belong[110000],tot[110000];
int findfa(int x){return fa[x]!=x?fa[x]=findfa(fa[x]):fa[x];}
struct node
{
    int lc,rc,c;
}tr[2110000];int trlen;
void add(int &now,int l,int r,int p)
{
    if(now==0)now=++trlen;
    tr[now].c++;
    if(l==r)return ;
    int mid=(l+r)/2;
    if(p<=mid)add(tr[now].lc,l,mid,p);
    else add(tr[now].rc,mid+1,r,p);
}
int rt[110000];
void merge(int &x,int y)
{
    if(x==0){x=y;return ;}
    if(y==0)return ;
    tr[x].c+=tr[y].c;
    merge(tr[x].lc,tr[y].lc);
    merge(tr[x].rc,tr[y].rc);
}
int Rank[110000];
int findKth(int x,int l,int r,int K)
{
    if(tr[x].c<K)return -1;
    if(l==r)return Rank[l];
    int lc=tr[x].lc,rc=tr[x].rc;
    int mid=(l+r)/2;
    if(K<=tr[lc].c)return findKth(lc,l,mid,K);
    else return findKth(rc,mid+1,r,K-tr[lc].c);
}
int n,m,Q;
char ch[15];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        int x;scanf("%d",&x);
        Rank[x]=i;add(rt[i],1,n,x);
        fa[i]=i,tot[i]=1,belong[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
        int x,y;scanf("%d%d",&x,&y);
        int p=findfa(x),q=findfa(y);
        if(p!=q)
        {
            if(tot[p]<tot[q])
            {
                merge(rt[belong[q]],rt[belong[p]]);
                belong[p]=belong[q];
                tot[q]+=tot[p];
                fa[p]=q;
            }
            else
            {
                merge(rt[belong[p]],rt[belong[q]]);
                belong[q]=belong[p];
                tot[p]+=tot[q];
                fa[q]=p;
            }
        }
    }
    scanf("%d",&Q);
    while(Q--)
    {
        int x,y;
        scanf("%s%d%d",ch+1,&x,&y);
        if(ch[1]=='Q')
        {
            int tmp=findfa(x);
            printf("%d\n",findKth(rt[belong[tmp]],1,n,y));
        }
        else
        {
            int p=findfa(x),q=findfa(y);
            if(p!=q)
            {
                if(tot[p]<tot[q])
                {
                    merge(rt[belong[q]],rt[belong[p]]);
                    belong[p]=belong[q];
                    tot[q]+=tot[p];
                    fa[p]=q;
                }
                else
                {
                    merge(rt[belong[p]],rt[belong[q]]);
                    belong[q]=belong[p];
                    tot[p]+=tot[q];
                    fa[q]=p;
                }
            }
        }
    }
    return 0;
}
4.7W防削顶单声道D类音频功率放大器HT6872介绍 HT6872是一款低EMI,防削顶失真,单声道免滤波D类音频功率放大器。在6.5V电源,10%THD+N,4Ω负载条件下,输出4.71W功率,在各类音频终端应用中维持高效率并提供AB类放大器的性能。 阅读详情

相关推荐

PLC编程入门基础知识

PLC即为可编程逻辑控制器,实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。

SANRENYIXING的博客 2万+

数据结构之线段树合并——永无乡,Lomsat gelral,Tree Rotations,Tree Rotations Escape Through Leaf

线段树合并,又是一种看似暴力的正确复杂度

374

STM32驱动AS5600磁性旋转位置传感器模块

文章目录简介引脚定义I2C接口写数据读数据从指定的地址开始读数据驱动程序cubeMX配置驱动程序`bsp_as5600.h``bsp_as5600.c`测试程序参考资料 简介 AS5600 是一款易于编程的磁性旋转位置传感器,具有高分辨率 12 位模拟或 PWM 输出。 这种非接触式系统测量径向磁化轴上磁铁的绝对角度。 该 AS5600 专为非接触式电位计应用而设计,其坚固的设计消除了任何同质外部杂散磁场的影响。 引脚定义 I2C接口 7位设备地址为0x36(二进制表示为0110110) 支持标准模式和

ApexYuan 1万+

线段树合并 - 永无乡(HNOI2012)

Analysis 裸的线段树合并板子题 Code #include<bits/stdc++.h> #define in read() #define re register using namespace std; inline int read(){ char ch;int f=1,res=0; while((ch=getchar())<'0'||ch>'9') i...

Faithfully-xly的博客 202

10-142 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格

分数 10全屏浏览题目切换布局作者 lhm单位 河北农业大学本题目要求编写SQL语句,查询厂商D生产的PC和便携式电脑的平均价格。

dqd66的博客 2748

从零上手:基于英飞凌TC377的UDE STK 5.0实战调试指南

本文详细介绍了基于英飞凌TC377芯片和UDE STK 5.0的实战调试指南,涵盖硬件连接、工作空间配置、程序烧录、多核调试等关键步骤。特别针对汽车电子领域常见的多核架构调试难题,提供了断点设置、变量监控等实用技巧,帮助开发者快速上手并优化调试效率。

weixin_30839881的博客 683

[HNOI2012]永无乡(线段树合并)

在每个点建立值域线段树,连边时用并查集判断连通性,然后将两个连通块的祖先合并,最后查询时输出x所在连通块的祖先的信息就行了 #include<bits/stdc++.h> using namespace std; const int N = 5e5+7; int fa[N],Rank[N],Island[N]; int Find(int x) { if(x==fa[x]) return x; return fa[x]=Find(fa[x]); } int n,m,q; inline int

jwg2732的专栏 226

手把手教你学simulink(26.8)--控制算法场景示例:基于强化学习的无人机姿态稳定控制系统

首先,我们需要定义无人机的姿态稳定控制环境。环境包括无人机的状态(姿态角、角速度等)和动作(电机转速)。我们还需要定义奖励函数,用于评估控制器的表现。matlab深色版本% 定义环境% 定义状态空间% 12个状态变量% 定义动作空间% 电机转速范围奖励函数用于评估控制器的表现。我们可以根据无人机的姿态误差、角速度误差以及控制输入的变化率来设计奖励函数。具体来说,当无人机的姿态接近设定值时,给予正奖励;当姿态误差较大或控制输入变化剧烈时,给予负奖励。matlab深色版本。

MHD0815的博客 496

[线段树合并] BZOJ 2733 永无乡

启发式合并 至今不知道时空复杂度怎么保证,从不证明算法复杂度,只会用大数据实测一下...... #include #include #include #include using namespace std; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+frea

雯舞 984

YOLOv8【第十三章:模型压缩与极致优化篇·第4节】LAMP 剪枝算法——无需超参的自动化剪枝策略!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 5642

室内无线传播损耗分析与传播模型验证课程设计

室内无线传播损耗分析与传播模型验证课程设计

a_zxswer的博客 187

数据结构——图解并查集(合并树)

什么是并查集 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不...

邓占勇的博客 3926

解锁RK平台黑科技:DPDK加速与硬件卸载实战

本文探讨了在RK平台上通过DPDK加速与硬件卸载技术构建高性能网络架构的方法。RK平台凭借强大的硬件性能为高并发网络处理提供基础,而DPDK通过用户态驱动、轮询机制等技术绕过内核瓶颈,显著提升数据包处理效率。硬件卸载则将校验和计算等任务交由专用硬件,释放CPU资源。实践案例显示,该方案可使网络吞吐量提升至理论极限,延迟降至5ms以下,CPU利用率降低40%。文章详细介绍了配置步骤、优化方法和常见问题解决方案,并展望了该技术在5G、车联网等新兴领域的应用前景。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1279

BZOJ-2733 永无乡 合并线段树 并查集

大家都很强, 可与之共勉 。733: [HNOI2012]永无乡Time Limit: 10 Sec Memory Limit: 128 MBDescription永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛。如果从岛 a 出发经过若干座(含 0

Lazer2001 4365

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[BZOJ2733][HNOI2012永无乡][线段树合并+并查集]

[BZOJ2733][HNOI2012永无乡]题目大意: 有一些岛屿,一开始由一些无向边连接。后来也有不断的无向边加入,每一个岛屿有个一独一无二的重要度,问任意时刻的与一个岛屿联通的所有岛中重要度第k大的岛的编号是什么。 思路:线段树合并裸题。用并查集维护岛屿之间的连通性,对一个联通块内的岛屿建一棵权值线段树,合并联通块的同时合并两棵线段树。抄了 学习了一发黄学长的线段树合并的板子。代码:#i

羽裳 724

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

bzoj2733 永无乡 (并查集+线段树合并)

问题描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛。如果从岛 a 出发经过若干座(含 0 座)桥可以到达岛 b,则称岛 a 和岛 b 是连 通的。现在有两种操作:B x y 表示在岛 x 与岛 y 之间修建一座新桥。Q x k 表示询问当前与...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 222

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

[bzoj2733][HNOI2012]永无乡 线段树合并+并查集

丁神的指针线段树真的吼长啊,而且我指针写不好

Unlimited Code Works 396

【bzoj 2733】永无乡(并查集+线段树合并)

传送门biu~ 维护一个并查集,在两个集合合并的时候把两棵线段树也合并。在线段树上查询第k小元素即可。 注意输出的是点的编号。 #include using namespace std; int father[100005],sa[100005]; int search(int x){return x==father[x]?x:father[x]=search(father[x]);}

zP1nG 396

线段树合并+并查集 || BZOJ 2733: [HNOI2012]永无乡 || Luogu P3224 [HNOI2012]永无乡

题面:P3224[HNOI2012]永无乡 题解: 随便写写 代码: 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 const int m...

weixin_30396699的博客 114

BZOJ[2733][HNOI2012]永无乡 线段树合并+并查集

题目链接 题目大意:给你n个点,每个点有权值k,现有两种操作:将两个点所在联通块合并,查询某个点所在联通块权值第k小是哪个数 Splay启发式合并解法在这里这题输出的是点的编号不是点的值…. 对于每个点,开个权值线段树,合并操作用并查集查找,线段树合并 查询操作是权值线段树基本操作,找第kk小的数时,如果左儿子的数超过k个就在左儿子里,否则去右儿子找第k−ls−>sizk-ls->siz的数

谁能代表肯德基 552

BZOJ2733 [HNOI2012]永无乡(并查集+线段树合并)

题目大意: 在$n$个带权点上维护两个操作:   1)在点$u,v$间连一条边;   2)询问点$u$所在联通块中权值第$k$小的点的编号,若该联通块中的点的数目小于$k$,则输出$-1$; 传送门 上周的模拟赛在一道线段树合并的题目上gg了,来学习一个。 对每一个联通块,我们维护一棵权值线段树。查询时,若左子树大小大于等于$k$进入左子树,否则进入右子树; 因为每棵线段树...

weixin_30585437的博客 141

BZOJ 2733 [HNOI2012]永无乡 (权值线段树启发式合并+并查集)

题意: n<=1e5的图里,在线连边、查询某连通块第k大 思路: 练习线段树合并的好题,因为依然记得上一次启发式合并trie的时候内存爆炸的恐怖,所以这次还是用了动态开点、回收 听说启发式合并splay更快QAQ,学会了试试 代码: #include<iostream> #include<cstdio> #include<algorithm&...

weixin_30407099的博客 188

BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并

题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛。如果从岛 a 出发经过若干座(含 0 座)桥可以到达岛 b,则称岛 a 和岛 b 是连 通的。现在有两种操作:B x y 表示在岛 x 与岛 y 之间修建一座新桥。Q x k 表示询问...

weixin_34128534的博客 190

[BZOJ2733] [HNOI2012]永无乡(并查集 + 线段树合并)

传送门 一看到第k大就肯定要想到什么权值线段树,主席树,平衡树之类的 然后就简单了 用并查集判断连通,每个节点建立一颗权值线段树,连通的时候直接合并即可 查询时再二分递归地查找 时间复杂度好像不是很稳定。。。但hzwer都用这种方法水过。。 正解好像是平衡树+启发式合并,以后学TT #include <cstdio> #include <iostr...

weixin_30539835的博客 122

bzoj2733 [HNOI2012]永无乡(并查集+线段树合并/启发式平衡树合并)

每个连通块维护一棵权值线段树即可。动态开点,查询时去线段树上爬即可。然后每次合并集合的时候把线段树也合并了。关于线段树合并:传送门 upd:也可以启发式合并平衡树,每次把sz小的直接塞到sz大的中去。 线段树合并 #include &lt;cstdio&gt; #include &lt;cstring&gt; #include &lt;algorithm&gt; #include &lt...

Icefox的博客 449
上一篇: [bzoj1112][树状数组]砖块Klo
下一篇: [bzoj2212][线段树合并]Tree Rotations
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值