数据结构专题 - 解题报告 - B

这篇博客分享了作者在解决一道数据结构问题时的经验,涉及最大生成树确保带宽最大化和使用倍增LCA算法优化搜索过程。通过预处理和DFS遍历,构建有向图并寻找相邻点的关系,最终实现高效求解路径信息。
摘要由CSDN通过智能技术生成

这是我这个专题做出来的第一道题,跟榜看到的B,读完题,惊了惊了!似李!货车运输!当时也不说忙着抢一血,反正就是把自己写过的代码直接粘来改改交了过了。
但这样做的意义仅仅是多一个过题数而已,还是得好好整理一下。

分析完题意后,我们知道我们需要一个最大生成树保证带宽尽可能大(因为我们不会去选择更低带宽的路),然后在一条路上找到带宽最小值。就可以搜图并记录边权最小值即可。但是这么暴力去搜基本上是必T的。我们就需要运用倍增lca来解决问题。

什么是倍增?个人理解这是一种预处理的方式,通过处理(一般以2为底数),得到区间部分的状态,在全图运作时不用每个单位每个单位计算。
比如在一张图上走7格,一步一步走需要7次运算,而如果通过这样的预处理,提前知道了22 ,21 ,20 的状态,那么只用3步就可以累加完成(4 + 2 + 1)。数字越大优化效果越明显。


那我们就来预处理吧:

FOR(i, 1, 20)
        FOR(j, 1, n)
        {
            f[j][i] = f[f[j][i-1]][i-1];				//递推
            w[j][i] = min(w[j][i-1], w[f[j][i-1]][i-1]);
        }

在dfs的过程中已经有f[to][0] = now即上一节点(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值