bzoj 1641 floyd

6 篇文章 0 订阅

题意:n个点,m条单向边,t组询问,询问点x到点y的路径上最大边权最小是多少

数据范围暴露一切系列

虽然看上去很像二分,但是n的数据范围才n<=300,妥妥的floyd然后O(1)查询

var
        n,m,t,x,y,z     :longint;
        map             :array[0..310,0..310] of longint;
        i,j,k           :longint;
function min(a,b:longint):longint;
begin
   if a<b then exit(a) else exit(b);
end;

function max(a,b:longint):longint;
begin
   if a<b then exit(b) else exit(a);
end;

begin
   read(n,m,t);
   for i:=1 to n do
     for j:=1 to n do map[i,j]:=maxlongint div 10;
   for i:=1 to n do map[i,i]:=0;
   for i:=1 to m do
   begin
      read(x,y,z);
      map[x,y]:=min(map[x,y],z);
   end;
   for k:=1 to n do
     for i:=1 to n do
       for j:=1 to n do
         if (i<>j) and (i<>k) and (j<>k) then
           map[i,j]:=min(map[i,j],max(map[i,k],map[k,j]));
   while (t>0) do
   begin
      dec(t);
      read(x,y);
      if map[x,y]<maxlongint div 10 then writeln(map[x,y]) else writeln(-1);
   end;
end.
——by Eirlys




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值