`
阿尔萨斯
  • 浏览: 4144859 次
社区版块
存档分类
最新评论

POJ 3615 Cow Hurdles(Folyd变形)

 
阅读更多

POJ 3615 Cow Hurdles(Folyd变形)

http://poj.org/problem?id=3615

题意:给你一个有向图,然后对于特定的点A与B,要你求出A到B之间所有可行路径的单段路距离最大值的最小值.(有点绕)

分析:

和前几题一样,利用的是Floyd算法的动态规划思想.假设d[i][j]是从i到j所有可行路径中的单段距离的当前最大值.现在有路(i,k)和路(k,j)且如果max(d[i][k],d[k][j])<d[i][j],那么就要更新d[i][j]的值= max(d[i][k],d[k][j]).

AC代码:

POJ 3615 Cow Hurdles(Folyd变形)
http://poj.org/problem?id=3615
题意:给你一个有向图,然后对于特定的点A与B,要你求出A到B之间所有可行路径的单段路距离最大值的最小值.(有点绕)
分析:
	和前几题一样,利用的是Floyd算法的动态规划思想.假设d[i][j]是从i到j所有可行路径中的单段距离的当前最大值.现在有路(i,k)和路(k,j)且如果max(d[i][k],d[k][j])<d[i][j],那么就要更新d[i][j]的值= max(d[i][k],d[k][j]).
AC代码:
#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]));
}
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;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics