P1613 跑路 最短路,倍增

2022-04-30 09:12:10 字數 828 閱讀 5073

發現 \(n\) 只有 \(50\), 可以用 \(floyd\) .

然後 \(w[i][j][l]\) 代表 \(i\) 到 \(j\) 是否存在 \(2^l\) 長的路.

四重迴圈,列舉即可.如果有則更新 \(dis[i][j]\) 為 \(1\) .

然後再跑 \(floyd\) 即可.

不過注意列舉 \(l\) 的這一層要大一點,到 \(50\) 左右.

#includetypedef int _int;

#define int long long

using namespace std;

int w[51][51][51];

int n,m,dis[51][51];

_int main()

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

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

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

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

if(i!=j&&j!=k&&i!=j)

if(w[i][k][l-1]&&w[k][j][l-1])

w[i][j][l]=1,dis[i][j]=1;

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

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

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

if(i!=j&&j!=k&&i!=j)

dis[i][j]=min(1ll*dis[i][j],1ll*dis[i][k]+dis[k][j]);

cout

}

洛谷 P1613 跑路(倍增 最短路)

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

洛谷P1613 跑路 最短路 倍增

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

洛谷 P1613 跑路 倍增 最短路

題目傳送門 大致題意 給定一張 n 個結點 m 條邊的有向圖,邊權固定為1,每秒可以移動 2 t t 為任意值 求從 1 到 n 的最短所需時間。其中 n leq 50,m leq 10000,dis leq int 第一眼是個最短路,然後發現不對勁。因為從 1 到 n 的最短路不一定是所求答案,即...