/**
* 好久没写题解了。。。要么都是大水题。。要么太难了没来得及补 T^T
* 今天上个大水吧。。表示我还活着 -_-
* 简单Floyd:
* 只不过dis[i][j] 表示的是 i->j的路上最大权的最小值。
* 只要在floyd上稍作修改。。就是裸地floyd。。
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <string>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
#define DEBUG 0
#define INF 0x03ffffff
#define MAXS 105
typedef long long LL;
using namespace std;
int n, m, q, dis[MAXS][MAXS];
void floyd() {
for(int k = 1; k <= n; k ++) {
for(int i = 1; i <= n; i ++) {
for(int j = 1; j <= n; j ++) {
int tmp = max(dis[i][k], dis[k][j]);
dis[i][j] = min(tmp, dis[i][j]);
}
}
}
}
void init() {
for(int i = 1; i <= n; i ++) {
for(int j = 1;j <= n; j ++) {
dis[i][j] = INF;
}
}
}
int main()
{
int curCase = 1;
while(cin >> n >> m >> q) {
if(!n && !m && !q) break;
init();
for(int i = 0; i < m; i ++) {
int u, v, w;
cin >> u >> v >> w;
dis[u][v] = dis[v][u] = w;
}
if(curCase != 1) puts("");
printf("Case #%d\n", curCase ++);
floyd();
for(int i = 0; i < q; i ++) {
int x, y;
cin >> x >> y;
if(dis[x][y] == INF) printf("no path\n");
else cout << dis[x][y] << endl;
}
}
return 0;
}
UVa 10048 - Audiophobia 简单Floyd
最新推荐文章于 2013-10-04 23:21:49 发布