倍增问题

前言

在整理总结题解的时候突然发现倍增这一章竟然连题解都没有写过,直接晕厥

T1:

直接做

T2:

首先根据倍增思想,现预处理出开 2j 次车,A/B先开车所到达的地点,和开的距离

这样两种查询,都可以根据预处理的来倍增求出

然后如何预处理呢?

我们维护一个链表,链表开始是所有城市按照高度排完序后的顺序,因为有条件说距离最近的一定是下标比它大的城市,所以我们下标从小向大枚举,如果已经遍历过了就从链表中删除该城市,然后找到这个城市前两项和后两项来统计距离最近,次近城市的位置

T3:

很巧妙的一道floyd题,我们先预处理出所有距离为 2t 的任意两点,设数组 dp[i][j][t]=1 表示在i,j中存在一条走 2t 的路径,再将所有i,j为1的两点重新建图,边长为1,否则为无穷大,再跑一遍floyd即可

T4:

我们可以发现,一条边有且仅能到达唯一的目的地,所以倍增求一下每个点经过指数条边权值和和最小值即可

T5:

首先设 dp[u] 表示 想要从u走到首都需要的最小花费

所以有状转方程: 对于一种车票(v是u的祖先)

dp[u]=min{dp[v]+wi}(dep[u]dep[v]<=ki)

然后我们可用倍增求出最小的 dp[v]

posted @   daydreamer_zcxnb  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示