首页 > TAG信息列表 > P1119
洛谷P1119 灾后重建
floyd的变形,本质是求从i号顶点到j号顶点只经过前k号点的最短路程。 #include<bits/stdc++.h> using namespace std; const int N = 300,INF = 0x3f3f3f3f; int n,m,qn; int g[N][N],t[N]; void update(int k){ for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(g[i][j]>g洛谷P1119 灾后重建 题解 Floyd算法
题目链接:https://www.luogu.com.cn/problem/P1119 解题思路: floyd变种题。主要要了解floyd算法的本质就是dp,状态 \(f_{i,j}\) 其实是状态 \(f_{i,j,k}\) 的状态压缩,表示 \(i\) 与 \(j\) 仅由前 \(k\) 个点(或者可以想象成仅由一个序列的点,而序列的最后一个点是 \(k\))的最短路径长度洛谷P1119 灾后重建(Floyd)
题目背景 BBB地区在地震过后,所有村庄都造成了一定的损毁,而这场地震却没对公路造成什么影响。但是在村庄重建好之前,所有与未重建完成的村庄的公路均无法通车。换句话说,只有连接着两个重建完成的村庄的公路才能通车,只能到达重建完成的村庄。 题目描述 给出BBB地区的村庄数NNN,村庄P1119 灾后重建(floyd进阶)
思路:这道题看n的范围很小(n<=200),显然就用floyd可以解决的问题,但又并不是简单的floyd算法,还是需要一些小小的变化。一开始我的思路是先跑一次弗洛伊德最短路,这样子显然复杂度很高,并且题目中的路径长度是时刻可能更新的,所以我们应该在修建的时候再跑最短路。可以用一个变量来记录修改【题解】P1119 灾后重建
题目地址 理解Floyed的本质 Floyed的本质是动态规划。 在地K次循环中,Floyed算法枚举任意点对(X,Y),在这之前,K从未做过任何点对的中点。因此,可以利用K为中转的路径长度更新。 在1..K的循环中,F[i][j]被更新为只允许借助前K个点为中转,点i和点j之间的最短路。 题目保证