Luogu P3547 [POI2013] CEN-Price List 题解 BFS 广度优先搜索

文章讨论了解决POI竞赛中关于无向图的问题,通过BFS算法处理边权为a和b的最短路径,通过两次BFS分别计算边权全a和混合a,b的情况,利用前向星结构删除重复遍历,最终给出时间复杂度分析。

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

题目链接:Luogu P3547 [POI2013] CEN-Price List
题目描述:

给定一张边权均为a的无向图,现在将所有两点之间最短路为2a的点之间增加一条长度为b的无向边,问到给定点s的单元最短路。

题解:

对于一个点us的最短路只有三种情况:

  1. 经过的边边权均为a
  2. 经过的边边权均为b
  3. 经过的边边权ab均有。

我们只需要求出上面三种情况的最短路取最小值即可。
对于情况一只需要进行一次BFS即可求出。
对于情况二我们同样可以通过一次BFS求出:

  1. 我们首先建立两张与原图一样的图,我们将两张图的边权全部记作1这样只需在最后的时候乘以a或者b即可,将这两张图记为gnewG
  2. 对于本轮BFS的结点u,标记其在g中的相邻结点v已访问;
  3. 通过g遍历与u相邻的结点v,通过newG遍历与v相邻的结点w;若w已经被标记,则说明uw之间的最短路为1,此时两者之间不存在边长为b的边,不能更新dis;若w并没有被标记,说明uw之间的最短路距离为2,此时存在边长为b的边,所以进行更新dis[w] = dis[u] + 1,并将w入队,删除vw的边;
  4. 通过g遍历与u相邻的结点v,标记其为未访问。

上述的过程需要删除vw的边,可以通过前向星实现(建立双向链表)。该算法与三元环计数类似,时间复杂度为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值