题意: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