在G城保卫战中,超级孪生蜘蛛Phantom001和Phantom002作为第三层防卫被派往守护内城南端一带极为隐秘的通道。
根据防护中心的消息,敌方已经有一只特种飞蛾避过第二层防卫,直逼内城南端通道入口。但优秀的蜘蛛已经在每个通道内埋下了坚固的大网,无论飞蛾进入哪个通道,他只有死路一条!(因为他是无法挣脱超级蛛网的)
现在,001和002分别驻扎在某两个通道内。各通道通过内线相通,通过每条内线需要一定的时间。当特种飞蛾被困某处,001或002会迅速赶来把它结果掉(当然是耗时最少的那个)。
001跟002都想尽早的完成任务,他们希望选择在最坏情况下能尽早完成任务的方案。
分析:
暴力枚举就能过了。。。。
代码:
var a,b,c,i,j,k,x1,x2,zero,soren:longint;
x:array[1..100,1..100]of longint;
function max(l,r:longint):longint;
begin
if l>r then exit(l)
else exit(r);
end;
function min(l,r:longint):longint;
begin
if l<r then exit(l)
else exit(r);
end;
begin
readln(a);
filldword(x,sizeof(x) shr 2,1000000);
for i:=1 to a do
x[i,i]:=0;
for i:=1 to 4 do
begin
read(b,c);
read(x[b,c]);
x[c,b]:=x[b,c];
end;
for k:=1 to a do
for i:=1 to a do
for j:=1 to a do
x[i,j]:=min(x[i,j],x[i,k]+x[k,j]);
soren:=maxlongint;
for i:=1 to a do
for j:=1 to a do
if i<>j then begin
for k:=1 to a do
zero:=max(zero,min(x[i,k],x[j,k]));
if zero<soren then begin
soren:=zero;
x1:=i;
x2:=j;
end;
zero:=0;
end;
if x1>x2 then begin
b:=x1;
x1:=x2;
x2:=b;
end;
writeln(x1,' ',x2);
end.
var a,b,c,i,j,k,x1,x2,zero,soren:longint;
x:array[1..100,1..100]of longint;
function max(l,r:longint):longint;
begin
if l>r then exit(l)
else exit(r);
end;
function min(l,r:longint):longint;
begin
if l<r then exit(l)
else exit(r);
end;
begin
readln(a);
filldword(x,sizeof(x) shr 2,1000000);
for i:=1 to a do
x[i,i]:=0;
for i:=1 to 4 do
begin
read(b,c);
read(x[b,c]);
x[c,b]:=x[b,c];
end;
for k:=1 to a do
for i:=1 to a do
for j:=1 to a do
x[i,j]:=min(x[i,j],x[i,k]+x[k,j]);
soren:=maxlongint;
for i:=1 to a do
for j:=1 to a do
if i<>j then begin
for k:=1 to a do
zero:=max(zero,min(x[i,k],x[j,k]));
if zero<soren then begin
soren:=zero;
x1:=i;
x2:=j;
end;
zero:=0;
end;
if x1>x2 then begin
b:=x1;
x1:=x2;
x2:=b;
end;
writeln(x1,' ',x2);
end.