【HNOI2016】最小公倍数

本文探讨了一种优化算法,用于解决无向图中存在特定参数限制的路径查询问题。通过分块和并查集维护,提高了查询效率。分析了算法的时间复杂度,并提供了实测对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意

给定一个N个点M条边的无向图,每条边有两个参数(a,b)Q个询问,每个询问给S,T,A,B,求是否存在一条ST的路径(是“路径”而不是“简单路径”),使得经过的边中amax=A,bmax=B

N,Q50000
M105
a,b109

分析

    暴力的想法就是对于每个询问,只加aqabqb的边,维护一个并查集,最后看a,b是否联通,以及联通块中a,b的最大值是否为qa,qb
    我们考虑用分块优化。对于一条参数为(ai,bi)的边,它只对Aai的询问有用。我们将边按a排序,分块,把每条边加到整块都能用到该边的块中。询问我们也将其插入它应在的块中。然后对于一个块,我们将其的询问和边按b从小到大排序,像暴力一样维护一个并查集,这里可以路径压缩。但这样是有漏洞的,因为对于某个A,某条边(ai,bi)满足aiA,但它没有插入这个块中,所以我们还要再扫一遍块内的边,把满足条件的边加入并查集。因为在这里每次询问的A没有单调性,所以我们的并查集还要具有回溯功能。
    最后,如果把每条边都加入每个满足条件的块中会T的。我们可以只将它插入到第一个满足条件的块中,然后相邻两个块归并排序。
    不妨设分块大小为LQ,M同阶,复杂度为O(MLlogN+MMLα(N)),最好的L应为MlogM,最终复杂度为O(MMlogM),但实测没有O(MMlogM)快。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值