POJ 3615 Cow Hurdles
题意: 有 N 个木桩,知道了 m 对木桩的高度差, 问从一点 a 跳到到 b 所需要经过的最小高度差。
分析: 将 Floyed 作一点改动 ,松弛操作 变为 g[i][j]=min(g[i][j],max(g[i][k],g[k][j]))
#include<stdio.h> #include<string.h> #define INF 0x1f1f1f int min(int a,int b){ return a<b?a:b;} int max(int a,int b){ return a>b?a:b;} int g[305][305]; int main() { int n,m,i,j,k,t,a,b,w; while(scanf("%d%d%d",&n,&m,&t)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) g[i][j]=INF; while(m--) { scanf("%d%d%d",&a,&b,&w); g[a][b]=w; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) if(g[i][k]!=INF) for(j=1;j<=n;j++) g[i][j]=min(g[i][j],max(g[i][k],g[k][j])); while(t--) { scanf("%d%d",&a,&b); printf("%d\n",g[a][b]==INF?-1:g[a][b]); } } return 0; }