NOIP模拟:长跑路径(Dijkstra)

企鹅豆豆即将要去考长跑了,但是作为一只企鹅,长跑自然比不过鸵鸟和鸡。为了公平起见,教练告诉豆豆,他可以从 K 个指定地点中选择两个不同的地点分别作为起点和终点来考试。
考试地图是一个由 N 个点 M 条边组成的没有重边和自环的连通无向图,一条边的长度为 Ai 。
豆豆想知道他的长跑考试最少需要跑多远。

即求一个图中给定点对的最近路径。

题解:
考试的时候乱搞了一个类似SPFA的做法更新每个点的最短路和次短路,感觉数据太水没把我卡掉。。

不得不说这题很妙。
按照k个点的二进制位分组,每次用该位为0的点连接新建的s点,该位为1的点连接新建的t点,跑 logn 次Dijkstra。时间复杂度 O(nlog2n)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct IO{
    streambuf *ib,*ob;
    inline void init(){
        ios::sync_with_stdio(false);
        cin.tie(NULL);cout.tie(NULL);
        ib=cin.rdbuf();ob=cout.rdbuf();
    }
    inline ll read(){
        char ch=ib->sbumpc();ll i=0,f=1;
        while(!isdigit(ch)){
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值