POJ1988-Cube Stacking 题解

本文讲解了如何利用并查集的数据结构优化立方体堆积问题中的距离更新,通过减少不必要的操作,将复杂度降低到O(n),仅在查询时更新堆内点距,显著提升效率。关键在于合并时只调整堆顶距离,其余在查找时自动更新。
摘要由CSDN通过智能技术生成

用到了并查集的一道题目
dis 数组来记录一个点到堆顶的距离,sz 数组来记录一个堆有多少个点,那么某个点下方的点数为 sz[fx]-dis[x]
这样看起来还是要做很多步,比如每次合并的时候下面的堆所有的点的 dis 都要更新,复杂度可能会到O(n*n),其实利用并查集的特性,我们可以只在询问到这个点的时候更新,这样就可以大大减少更新所花的时间了。为了后续查询的时候能正确更新,每次合并只需将下方堆顶到上方堆顶的距离更新即可。

// Cube Stacking
#include <iostream>
const int N = 3e4 + 5;
using namespace std;

int f[N], sz[N], dis[N];
int Find(int x)
{
   
    int fx = f[x
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值