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;
}

浙公网安备 33010602011771号