洛谷P1613 跑路

2022-04-05 22:35:29 字數 1281 閱讀 4883

傳送門啦

分析:

這個題看很多人都在用floyd和倍增的方法來做的。

那我就用spfa來跑最短路吧

a[i][j][k]:表示從i到j是否存在長2^k的邊。

預處理的時候就將這些邊賦值成1 (長2^k的邊)(再補充一下:這些邊用1s就能走完)

注意一下:

預處理的時候k迴圈在最外層,因為要所有的從u到v長度為2^k的邊,然後賦值成1.

而打標記的時候k放在了最後一層迴圈上,因為要把u到v邊上的情況全部試一遍。。好像不太清楚。。

就是u到v的邊的值我們不確定,所以都列舉試一遍。 (從0開始,被這個卡了好幾次)

#include #include 

#include

#include

#include

using

namespace

std;

const

int maxn = 55

;long

long n,m,u,v,a[maxn][maxn][65

]; long

long

f[maxn][maxn];

long

long

dis[maxn];

bool

vis[maxn];

void spfa(int

s) q.push(s);

dis[s] = 0

; vis[s] = 1

;

while(!q.empty())}}

}int

main()

for(int k=1;k<=64;k++)

for(int j=1;j<=n;j++)

for(int u=1;u<=n;u++)

for(int v=1;v<=n;v++)

if(a[u][j][k-1] && a[j][v][k-1

]) a[u][v][k]=1

;

for(int u=1;u<=n;u++)

for(int v=1;v<=n;v++)

for(int k=0;k<=64;k++)

if(a[u][v][k])

spfa(1);

printf(

"%lld

",dis[n]);

return0;

}

最後wustdio給我介紹了一種矩陣加速的寫法。。

洛谷 P1613 跑路

題目描述 小a的工作不僅繁瑣,更有苛刻的規定,要求小a每天早上在6 00之前到達公司,否則這個月工資清零。可是小a偏偏又有賴床的壞毛病。於是為了保住自己的工資,小a買了乙個十分牛b的空間跑路器,每秒鐘可以跑2 k千公尺 k是任意自然數 當然,這個機器是用longint存的,所以總跑路長度不能超過ma...

跑路 洛谷p1613

小a的工作不僅繁瑣,更有苛刻的規定,要求小a每天早上在6 00之前到達公司,否則這個月工資清零。可是小a偏偏又有賴床的壞毛病。於是為了保住自己的工資,小a買了乙個十分牛b的空間跑路器,每秒鐘可以跑2 k千公尺 k是任意自然數 當然,這個機器是用longint存的,所以總跑路長度不能超過maxlong...

洛谷p1613 跑路

大致題意 給一張有向圖 存在自環 每條邊權均為1,現在有一人要從1號結點走到n號結點,但是這個人有乙個神奇的瞬移機器,這個機器走2 k2 k 2k k kk為自然數 花費的時間都為1,問從起點到終點的最小花費時間。思路如下 step 1.我們可以處理出所有的從乙個點到達另乙個點的距離可以為2 k2 ...