历史 (并查集 按秩合并)

历史(history.c/cpp/pas)

8.28
思路:
做法一:【数据结构优化暴力】
30%做法:由于只需要知道连通性,我们可以维护森林。有一个比较好的暴力方法是,连边时在边上记录这条边连上的时刻,询问时求两点之间最迟的边即可知道这两个点连通的时刻,暴力复杂度O(nm),能拿到30%的分数。【这个思路很重要!】
100%做法:套上个LCT即可。但由于数据范围较大,可能需要优化常数,由于数据有梯度,具体分数根据代码的丑陋程度而定。

做法二:【利用题目性质离线】
30%做法:对于特殊的另外30%,可以离线。那么把询问按时间排序,再套个并查集即可,复杂度O(m),能拿到30%的分数。和一个大暴力组合就能拿到60%的分数。【由于不太方便表示,将并查集的复杂度看作常数】
100%做法:此题只有修改强制在线,而询问不强制在线,实际上仔细观察,就可以发现仍然可以离线来做。复杂度O(m),能拿到100%的分数。

做法三:【简洁且能够处理询问也强制在线的情况】
30%做法:暴力存下每次的并查集。复杂度O(nm)。
70%做法:熟悉数据结构的同学应该很容易想到这个做法。这道题显然可以用可持久化并查集维护,用按秩合并套上一个可持久化线段树维护fa数组。复杂度O(nlog2n),由于数据有梯度,这个做法本地测试时给了70%的分数。但是要是又遇到跑得十分快的评测机,那我也

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值