From 5d97080c21b6404c0807f57f69a356d235a0aa53 Mon Sep 17 00:00:00 2001 From: xingyou wu <3050128610@qq.com> Date: Thu, 3 Apr 2025 09:21:47 +0800 Subject: [PATCH] =?UTF-8?q?lanqiao=201460=20=E8=B7=AF=E5=BE=84(floyd)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 12lanqiao/test5-2.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 12lanqiao/test5-2.cpp diff --git a/12lanqiao/test5-2.cpp b/12lanqiao/test5-2.cpp new file mode 100644 index 0000000..a6c63c3 --- /dev/null +++ b/12lanqiao/test5-2.cpp @@ -0,0 +1,35 @@ +// lanqiao 1460 路径(floyd) +#include +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; +} \ No newline at end of file