洛谷P1613 跑路

2022-03-17 17:06:49 字數 828 閱讀 7141

題目

倍增直接用圖論演算法必然解決不了這個問題,所以可以使用倍增演算法優化。

我們遇到這個題該怎麼想,首先,題目要求的值是1到n的最小代價。代價是路徑的二進位制中1的個數。

我們先預處理出每兩點之間是否有邊權和為(1 << k)的路徑。這樣的話,代價預處理就可以只需考慮1的情況,因為每個數都可以由(1《處理之後,一開始連線的邊代價都為1,然後可以找到許多可以橫跨許多點的代價為1的路徑,這樣的話, 就用floyd轉移代價即可。

#include #define n 1000111		

#define int long long

using namespace std;

int n, m, mp[101][101];

int cek[101][101][100]; //cek[i][j][k]表示是否i到j之間有邊權和為(1 << k)的路徑

signed main()

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

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

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

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

mp[i][j] = min(mp[i][j], mp[i][k] + mp[k][j]);

printf("%lld", mp[1][n]);

return 0;}/*

7 81 6

5 16 4

4 55 2

3 77 5

2 3rignt ans: 2

*/

洛谷 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 ...