lanqiao 1460 路径(floyd)
This commit is contained in:
35
12lanqiao/test5-2.cpp
Normal file
35
12lanqiao/test5-2.cpp
Normal file
@@ -0,0 +1,35 @@
|
||||
// lanqiao 1460 路径(floyd)
|
||||
#include<bits/stdc++.h>
|
||||
using namespace std;
|
||||
const int N = 3e3 + 10, INF = INT_MAX;
|
||||
bool vis[N]; // 标记数组
|
||||
int mindis[N][N]; // 最短路数组
|
||||
int s = 1, n = 2021;
|
||||
|
||||
// floyd求多源最短路-时间复杂度-O(n^3)
|
||||
void floyd(){
|
||||
// 枚举中转点
|
||||
for(int k = 1; k <= n; k++){
|
||||
// 枚举任意两点
|
||||
for(int i = 1; i <= n; i++){
|
||||
for(int j = 1; j <= n; j++){
|
||||
if(mindis[i][k] != INF && mindis[k][j] != INF){
|
||||
if(mindis[i][k] + mindis[k][j] < mindis[i][j]){
|
||||
mindis[i][j] = mindis[i][k] + mindis[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
int main(){
|
||||
fill(mindis[0], mindis[0] + N * N, INF);
|
||||
for(int i = 1; i <= n; i++){
|
||||
for(int j = max(i-21, 1); j <= min(i+21, 2021); j++){
|
||||
if(i != j) mindis[i][j] = mindis[j][i] = lcm(i, j);
|
||||
}
|
||||
}
|
||||
floyd();
|
||||
cout << mindis[1][n] << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user