[USACO07NOV]牛栏Cow Hurdles
OJ题号:洛谷2888
思路:修改Floyd,把边权和改为边权最大值。另外注意是有向图。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 #define inf 0x7fffffff 5 int main() { 6 int n,m,t; 7 scanf("%d%d%d",&n,&m,&t); 8 int d[n+1][n+1]; 9 for(int i=1;i<=n;i++) { 10 for(int j=1;j<=n;j++) { 11 d[i][j]=(i==j)?0:inf; 12 } 13 } 14 while(m--) { 15 int s,e,h; 16 scanf("%d%d%d",&s,&e,&h); 17 d[s][e]=h; 18 } 19 for(int k=1;k<=n;k++) { 20 for(int i=1;i<=n;i++) { 21 for(int j=1;j<=n;j++) { 22 d[i][j]=min(d[i][j],max(d[i][k],d[k][j])); 23 } 24 } 25 } 26 while(t--) { 27 int a,b; 28 scanf("%d%d",&a,&b); 29 printf("%d\n",(d[a][b]!=inf)?d[a][b]:-1); 30 } 31 return 0; 32 }