POJ 3165 最短路 floyd
http://poj.org/problem?id=3615
dp方程(f[i][j]>MAX(f[i][k],f[k][j])) f[i][j]=MAX(f[i][k],f[k][j]);
此题为有向图。
n=300
o(n^3)
#include <stdio.h>
#include <string.h>
#define MAXN 310
#define inf 1000000000
#define MAX(x,y) (x<y?y:x)
int g[MAXN][MAXN],f[MAXN][MAXN];
int main(){
int n,m,t,i,j,k,x,y;
scanf("%d%d%d",&n,&m,&t);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
f[i][j]=inf;
for (i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&k);
f[x][y]=k;
// f[y][x]=k;
}
for (k=1;k<=n;k++)
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (f[i][j]>MAX(f[i][k],f[k][j])) f[i][j]=MAX(f[i][k],f[k][j]);
for (i=1;i<=t;i++){
scanf("%d%d",&x,&y);
if (f[x][y]<inf) printf("%d\n",f[x][y]);else printf("-1\n");
}
return 0;
}