多元最短路变形题,最大边最小值。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int C,S,Q,kase=0;
while(scanf("%d%d%d",&C,&S,&Q)&&!(!C&&!S&&!Q))
{
int gl[105][105];
memset(gl,0x7f,sizeof(gl));
int INF=gl[0][0];
for(int i=0; i<S; ++i)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
gl[u][v]=gl[v][u]=w;
}
for(int i=0; i<=C; ++i)
gl[i][i]=0;
for(int k=1; k<=C; ++k)
for(int i=1; i<=C; ++i)
for(int j=1; j<=C; ++j)
gl[i][j]=min(gl[i][j],max(gl[i][k],gl[k][j]));
if(kase) printf("\n");
printf("Case #%d\n",++kase);
while(Q--)
{
int a,b;
scanf("%d%d",&a,&b);
if(gl[a][b]!=INF)printf("%d\n",gl[a][b]);
else printf("no path\n");
}
}
return 0;
}