题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=989
紫书P365页
题意:求最大值的最小值。
莫名其妙的WA,原来是INF的值太大,还是刘汝佳说的好,INF太大d[i][k]+d[k][j],就容易溢出,稍微大一点就好,就是总长。
然后就是重边的问题了,题目死活没找到有说到重边的问题。还好经验告诉我,有重边。
然后就是PE,还是很隐蔽。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define MAXN 105 #define INF 1000000000 int dist[MAXN][MAXN]; int main() { int n,m,q; int cases = 0; while(scanf("%d%d%d",&n,&m,&q)==3&&n) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dist[i][j] = INF; for(int i=1;i<=n;i++) dist[i][i] = 0; for(int i=0;i<m;i++) { int u,v,d; scanf("%d%d%d",&u,&v,&d); dist[u][v] = dist[v][u] = min(dist[u][v],d); } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dist[i][j] = min(dist[i][j],max(dist[i][k],dist[k][j])); if(cases) puts(""); printf("Case #%d ",++cases); for(int i=0;i<q;i++) { int u,v; scanf("%d%d",&u,&v); if(dist[u][v]>=INF) puts("no path"); else printf("%d ",dist[u][v]); } } return 0; }