您的位置:首页 > 其它

poj 3615 :Cow Hurdles (floyd)----很好

2010-12-03 23:21 609 查看
题意:奶牛们为了比赛要刻苦训练跳木桩。现在有n个木桩,并知道其中m对木桩的高度差。问奶牛们能从木桩u跳到木桩v,最少的跳跃高度是多少?

思路:基础的floyd。只是在传递的地方要改变一下松弛条件就可以了。

源代码:(540K 422MS/329MS)

#include<iostream>

using namespace std;

const int Max = 305;

const int inf = 99999999;

int max(int a, int b){

return a
> b ? a : b;

}

int main(){

int n, m, t,
u, v, w, i, j, k;

int
map[Max][Max];

scanf("%d%d%d", &n, &m,
&t);

for(i = 1; i
<= n; i ++)

for(j = 1; j <= n; j ++){

if(i == j) map[i][j] = 0;

else map[i][j] = inf;

}

while(m
--){

scanf("%d%d%d", &u, &v,
&w);

if(map[u][v] > w)

map[u][v] = w;

}

for(k = 1; k
<= n; k ++)

for(i = 1; i <= n; i ++)

for(j = 1; j <= n; j ++){

int w = max(map[i][k],
map[k][j]);
// 不用max函数的话就从422MS优化为329MS。

if(map[i][j] > w)

map[i][j] = w;

}

while(t
--){

scanf("%d%d", &u, &v);

if(map[u][v] == inf) printf("-1/n");

else printf("%d/n", map[u][v]);

}

return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: