poj3615 給你一個有向圖,然後對於特定的點A與B,要你求出A到B之間所有可行路徑的單段路距離最大值的最小值.
阿新 • • 發佈:2018-12-20
#include<cstdio> #include<algorithm> #define INF 1e9 using namespace std; const int maxn = 300+10; int n,m,t; int d[maxn][maxn]; void floyd() { for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(d[i][k]<INF &&d[k][j]<INF) d[i][j]=min(d[i][j],max(d[i][k],d[k][j])); // 當不同類d[i][k]和d[k][j]合併的時候,取得是max(最大值,因為我們要求i到j這段路內的最大值)。然後當同類路徑值(即兩個d[i][j]可行值)選優時,取得是最小值(因為我們要求所有i到j路徑目的值中的最小值)。 } int main() { while(scanf("%d%d%d",&n,&m,&t)==3) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) d[i][j]= i==j?0:INF; for(int i=1;i<=m;i++) { int u,v,height; scanf("%d%d%d",&u,&v,&height); d[u][v]=height; } floyd(); while(t--) { int u,v; scanf("%d%d",&u,&v); printf("%d\n",d[u][v]==INF?-1:d[u][v]); } } return 0; }