Luogu P1613跑路(倍增 Floyd)

2022-05-01 02:06:12 字數 866 閱讀 7243

題目鏈結在此

其實我看到這道題一點想法都沒有

設f[i][j][k]表示用2i秒能不能從j走到k。如果可以,那j到k就可以一秒走到,它們的路徑長度就是1。方程為f[i][j][k]=f[i-1][j][l]&&f[i-1][l][k]。

最後在圖上跑一遍floyd。複雜度o(n3)。

**如下

#include#include

#include

#include

inline

long

long

read()

while

(isdigit(ch))

return num*f;

}bool f[65][55][55

];int map[55][55

];int q[1000000

],h,t;

intmain()

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

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

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

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

if(f[i-1][j][k]&&f[i-1

][k][l])

f[i][j][l]=map[j][l]=1

;

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

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

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

if(map[i][j]+map[j][k]map[j][k];

printf("%d

",map[1

][n]);

return0;

}

洛谷1613跑路(倍增)

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

luogu1613 跑路(倍增)

題目 我是超連結 題解 乙個spfa版本的。看看這個2 k就知道是倍增,一開始想用類似求lca的方法,但是發現這樣乙個遠度的只能連乙個點 只有乙個爸爸 但其實可以連到好多點,我們考慮用floyd,f l i j 表示走2 l i可以走到j,那讀入就是f 0 i j 然後求最短路就ok了。可以用flo...

洛谷 1613 跑路 倍增

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