题目
从a点到b点, 找到一条路径,使得这条路径上的所有噪音中最大的值是所有路径中最小的, 这个噪音值便是要求的。
思路
首先询问次数较多,考虑多源。这个路径结点最大值最小问题,其实类似于最短路,floyd改一下即可。
代码
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#define _for(i,a,b) for(int i = (a); i<(b); i++)
#define _rep(i,a,b) for(int i = (a); i<=(b); i++)
using namespace std;
const int INF = 1000000000;
const int maxn = 100+10;
int n, m, q, d[maxn][maxn];
int main(){
int kase = 0;
while(scanf("%d%d%d",&n,&m,&q) == 3 && n){
int u,v,w;
_rep(i,1,n) _rep(j,1,n) if (i != j) d[i][j] = INF;
_for(i,0,m){
scanf("%d%d%d",&u,&v,&w);
d[u][v] = w;
d[v][u] = w;
}
_rep(k,1,n)
_rep(i,1,n)
_rep(j,1,n)
d[i][j] = min(d[i][j], max(d[i][k], d[k][j]));
if (kase) printf("\n");
printf("Case #%d\n",++kase);
_for(i,0,q){
scanf("%d%d",&u,&v);
if (d[u][v] == INF) printf("no path\n");
else printf("%d\n",d[u][v]);
}
//printf("\n");
}
}