[unknown OJ] 割海成路之日

博客介绍了如何解决一个名为'割海成路之日'的编程问题,主要利用并查集来处理联通性问题。文章分为两部分:题目介绍和解法阐述。解法中提到,初始考虑无修改情况,使用两个并查集分别维护1类边和1,2类边的联通性。对于查询操作,找到当前点的1联通块,并计算通过三类边到达2联通块的可能性。在面对修改操作时,注意到修改只会使并查集合并,因此在代码中进行相应处理,整体操作的时间复杂度为O(n)。" 105880852,9376307,TXT LOG userdefine字段配置与处理详解,"['数据处理', '日志分析', '用户定义', '配置指南']
摘要由CSDN通过智能技术生成

一、题目

点此看题

二、解法

首先要考虑没有修改的情况,这个t到达s好像是关于联通性的问题,不妨考虑并查集。

考虑这个路径上只会是两种形式: 1 , 2 1,2 1,2类边-> 3 3 3类边-> 1 1 1类边,或者是只经过 1 , 2 1,2 1,2类边。我们不妨维护一个 1 1 1类边并查集, 1 , 2 1,2 1,2类边并查集(称为 1 1 1并查集和 2 2 2并查集),连通性代码如下:

int connect(int a,int b)
{
   
	return yi.find(a)==yi.find(p[er.find(b)])//b去找a
	|| er.find(p[yi.find(a)])==er.find(b)//a去找b, 是为了处理不同深度关系的a,b
	|| er.find(a)==er.find(b);//一个2联通内
}

询问的话我们找到当前点的 1 1 1联通,首先这个联通块内是可以到达的,然后我们考虑经过三类边到达 2 2 2联通,那我们就需要维护一个 s o n [ x ] son[x] s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值