题意:
从a点到b点, 找到一条路径,使得这条路径上的所有噪音中最大的值是所有路径中最小的, 这个噪音值便是要求的。
思路:
folyed, 枚举的第一层为中间的点体现了dp的无后效性
这是最大值最小的问题,所以在路径上只要存储沿路中的最大值就好
里层的取大保证沿路最大值,外层保证目的两点的最小值
代码:
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
int flo[105][105];
int c, s, q;
int main() {
int t = 1;
while(scanf("%d%d%d", &c, &s, &q) && (s+c+q)) {
for(int i=1; i<=c; i++)
for(int j=1; j<=c; j++)
flo[i][j] = 999999999;
int a, b, v;
for(int i=1; i<=s; i++) {
scanf("%d%d%d", &a, &b, &v);
flo[a][b] = flo[b][a] = v;
}
for(int k=1; k<=c; k++)
for(int i=1; i<=c; i++)
for(int j=1; j<=c; j++) {
flo[i][j] = min(flo[i][j], max(flo[i][k], flo[k][j]));
}
if(t != 1)
printf("\n");
printf("Case #%d\n", t ++);
for(int i=1; i<=q; i++) {
scanf("%d%d", &a, &b);
if(flo[a][b] != 999999999) {
printf("%d\n", flo[a][b]);
}
else
printf("no path\n");
}
}
return 0;
}