題目描述 description
小a的工作不僅繁瑣,更有苛刻的規定,要求小a每天早上在6:00之前到達公司,否則這個月工資清零。可是小a偏偏又有賴床的壞毛病。於是為了保住自己的工資,小a買了乙個十分牛b的空間跑路器,每秒鐘可以跑2^k千公尺(k是任意數)。當然,這個機器是用longint存的,所以總跑路長度不能超過maxlongint千公尺。小a的家到公司的路可以看做乙個有向圖,小a家為點1,公司為點n,每條邊長度均為一千公尺。小a想每天能醒地盡量晚,所以讓你幫他算算,他最少需要幾秒才能到公司。資料保證1到n至少有一條路徑。
輸入輸出格式 input/output
輸入格式:
第一行兩個整數n,m,表示點的個數和邊的個數。
接下來m行每行兩個數字u,v,表示一條u到v的邊。
輸出格式:
一行乙個數字,表示到公司的最少秒數。
4 41 1
1 22 3
3 41
思路:2^k容易想到倍增,細想一下覺得挺簡單。
注意:inf不要取太大,容易超限。
#include #include #include #include #include #include using namespace std;
const int maxn=65;
int n,m,f[maxn][maxn];
bool map[maxn][maxn][maxn];
inline int get()
int main()
for(int k=1;k<=maxn;++k)
for(int p=1;p<=n;++p)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
} for(int k=1;k<=n;++k)
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
printf("%d\n",f[1][n]);
return 0;
}
洛谷 1613 跑路 倍增
題目描述 小a的工作不僅繁瑣,更有苛刻的規定,要求小a每天早上在6 00 6 00 6 00 之前到達公司,否則這個月工資清零。可是小a偏偏又有賴床的壞毛病。於是為了保住自己的工資,小a買了乙個十分牛b的空間跑路器,每秒鐘可以跑2 k2 k 2k千公尺 k是任意自然數 當然,這個機器是用lon gi...
洛谷1613 跑路 倍增 Floyd
首先,我們一定要認識到本題中的最短時間所對應的道路不一定是在起點到終點的最短路。例如,起點到終點的最短路為 15 那麼對 15 進行二進位制拆分的話是 11 11,這時求出的最短時間為4。然而如果有一條長度為 16 的路徑的話最短時間就為 1,顯然比之前求的更優 我們在這裡定義兩個陣列 in td ...
洛谷1613 跑路(倍增 最短路)
點此看題面 大致題意 小a aa要從1 11號節點到n nn號節點,已知他每個單位時間可以跑2 k2 k 2k千公尺,求他最少需要多少個單位時間。預處理由於資料範圍較小,我們可以先大力預處理。首先,將題目中給出的邊邊權初始化為000。若從一點出發,到兩點皆有一條邊權為k kk的邊,就將這兩點之間連一...