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