zoj 1232(Floyd预处理 + 状态图上的最短路(好题))
来源:互联网 发布:有生日提醒软件 编辑:程序博客网 时间:2024/06/13 03:08
题目链接
思想挺好的一个题目, 跟这个题做法类似, 但要多一步预处理, 详见代码。。。
#include <vector>#include <queue>#include <list>#include <map>#include <set>#include <deque>#include <stack>#include <bitset>#include <algorithm>#include <functional>#include <numeric>#include <utility>#include <sstream>#include <iostream>#include <iomanip>#include <cstdio>#include <cmath>#include <cstdlib>#include <ctime>using namespace std;typedef pair<int, int> P;const int N = 105;const int INF = (int)1e9;#define BP cout << "here" << endl;#define fi first#define se second#define mp make_pairqueue<P> Q;int a, b, n, m, lim, K;int dp[N][15], dis[N][N];bool inq[N][15];void init() {for (int i = 0; i < n; i++) {fill(dis[i], dis[i] + n, INF);fill(dp[i], dp[i] + K + 1, INF);fill(inq[i], inq[i] + K + 1, 0);}}int main() {int test, u, v, w;scanf("%d", &test);while (test--) {scanf("%d%d%d%d%d", &a, &b, &m, &lim, &K);n = a + b;init();for (int i = 0; i < m; i++) {scanf("%d%d%d", &u, &v, &w);u--, v--;dis[u][v] = min(dis[u][v], w);dis[v][u] = dis[u][v];}for (int k = 0; k < a; k++)for (int i = 0; i < n; i++)for (int j = 0; j < n; j++) {if (dis[i][k] + dis[k][j] > lim) continue;dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);}Q.push(mp(n - 1, 0));dp[n - 1][0] = 0;while (!Q.empty()) {P cur = Q.front(); Q.pop();int u = cur.fi;int t = cur.se;inq[u][t] = 0;for (int i = 0; i < n; i++) if (dis[u][i] != INF) {if (dp[i][t] > dp[u][t] + dis[u][i]) {dp[i][t] = dp[u][t] + dis[u][i];if (!inq[i][t]) {Q.push(mp(i, t));inq[i][t] = 1;}}if (t < K && dp[i][t + 1] > dp[u][t] && dis[u][i] <= lim) {dp[i][t + 1] = dp[u][t];if (!inq[i][t + 1]) {Q.push(mp(i, t + 1));inq[i][t + 1] = 1;}}}}int res = INF;for (int i = 0; i <= K; i++)res = min(res, dp[0][i]);printf("%d\n", res);}return 0;}
- zoj 1232(Floyd预处理 + 状态图上的最短路(好题))
- SRM 573 div1 lev2(状态图上的最短路)
- zoj 1092 Arbitrage(最短路,floyd)
- 最短路(floyd)
- zoj 3166 Lazy Tourist(最短路Floyd)
- 最短路算法(Floyd)
- UVA104Arbitrage(floyd最短路)
- hdu1690(最短路floyd)
- 最短路poj2253(floyd)
- hdu2544 最短路 (floyd)
- 最短路(Floyd算法)
- ZOJ 3781 最短路(想法好题目)
- 坐在马桶上看算法:只有五行的Floyd最短路算法(转载)
- ZOJ 3166 Lazy Tourist 最短路floyd模版题
- hdu 1385(zoj 1456)Minimum Transport Cost(最短路,输出路径,Floyd实现)
- zoj 1221 Risk 最短路 floyd
- zoj 3166 Lazy Tourist 最短路 floyd
- HDU 2544 最短路(最短路 Floyd)
- 如何在Mac OS X (Lion)中安装Subversion Server
- gentoo下grub文件编辑
- hdu 4336 概率DP 状压DP
- Window错误处理
- 内核驱动模块编译方法
- zoj 1232(Floyd预处理 + 状态图上的最短路(好题))
- Singleton模式
- Ubuntu下SPICE的安装与配置
- IOS No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv6 armv7)错误
- android 读写文本
- VC6.0下配置EON SDK
- C++语法表达式规则的建立基础
- puts()函数和printf函数的区别
- 技能是重要的