codevs 孪生蜘蛛

题目描述 Description

在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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值