POJ 3615 Cow Hurdles floyd传递闭包

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

题意:N头牛,M条有向边,每条边上都有一个栏杆,牛希望跨的栏尽量低,求牛跨的栏最低是多少

有传递闭包,让间接相邻的两条边直接相邻  权值 max min求

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#define nMAX 302
#define inf 1<<30
using namespace std;
int map[nMAX][nMAX];
int N,M,T;
int max(int a,int b)
{
    return a>b?a:b;
}
int min(int a,int b)
{
    return a<b?a:b;
}
void floyd()
{
    int i,j,k;
    int MAX;
    for(i=1;i<=N;i++)
        for(j=1;j<=N;j++)
           for(k=1;k<=N;k++)
            {
                if(map[j][i]!=inf&&map[i][k]!=inf)
                {

                  MAX=max(map[j][i],map[i][k]);
                  MAX=min(MAX,map[j][k]);
                  map[j][k]=MAX;
               }
           }
}
int main()
{

    int i,j,k;
    while(~scanf("%d%d%d",&N,&M,&T))
    {
        for(i=1;i<=N;i++)
         for(j=1;j<=N;j++)
          map[i][j]=inf;
        while(M--)
        {
           scanf("%d%d%d",&i,&j,&k);
            map[i][j]=k;
        }
        floyd();
        while(T--)
        {
          scanf("%d%d",&i,&j);
          if(map[i][j]<inf)printf("%d\n",map[i][j]);
          else{printf("-1\n"); }

        }
    }
    return 0;
}

  

posted @ 2012-04-16 21:33  快乐.  阅读(141)  评论(0编辑  收藏  举报