tyvj P1069 - cowtour
P1069 - cowtourFrom price Normal (OI) 总时限:9s 内存限制:128MB |
|||||||
|---|---|---|---|---|---|---|---|
|
|||||||
Delphi语言: 高亮代码由发芽网提供
program tyvj1069;
var a:array[1..150,1..150] of 0..1;
dist:array[1..150,1..150] of extended;
x,y:array[1..150] of integer;
m:array[1..150] of extended;
i,j,k,n:longint;ans,d:extended;
st:string;
function max(a,b:extended):extended;
begin
if a>b then exit(a)
else exit(b);
end;
begin
readln(n);
for i:=1 to n do
readln(x[i],y[i]);
fillchar(dist,sizeof(dist),0);
for i:=1 to n do begin
readln(st);
for j:=1 to n do begin
if st[j]='1' then
dist[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]))
else dist[i,j]:=0;
end;
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)and(dist[i,k]>0)and(dist[j,k]>0)
then if (dist[i,j]=0)or(dist[i,j]>dist[i,k]+dist[k,j])
then dist[i,j]:=dist[i,k]+dist[k,j];
fillchar(m,sizeof(m),0);
for i:=1 to n do
for j:=1 to n do
m[i]:=max(m[i],dist[i,j]);
ans:=0;
for i:=1 to n-1 do
for j:=i+1 to n do begin
d:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
if (dist[i,j]=0)and((ans=0)or(ans>m[i]+m[j]+d)) then
ans:=m[i]+m[j]+d;
end;
for i:=1 to n do ans:=max(ans,m[i]);
writeln(ans:0:6);
end.
var a:array[1..150,1..150] of 0..1;
dist:array[1..150,1..150] of extended;
x,y:array[1..150] of integer;
m:array[1..150] of extended;
i,j,k,n:longint;ans,d:extended;
st:string;
function max(a,b:extended):extended;
begin
if a>b then exit(a)
else exit(b);
end;
begin
readln(n);
for i:=1 to n do
readln(x[i],y[i]);
fillchar(dist,sizeof(dist),0);
for i:=1 to n do begin
readln(st);
for j:=1 to n do begin
if st[j]='1' then
dist[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]))
else dist[i,j]:=0;
end;
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)and(dist[i,k]>0)and(dist[j,k]>0)
then if (dist[i,j]=0)or(dist[i,j]>dist[i,k]+dist[k,j])
then dist[i,j]:=dist[i,k]+dist[k,j];
fillchar(m,sizeof(m),0);
for i:=1 to n do
for j:=1 to n do
m[i]:=max(m[i],dist[i,j]);
ans:=0;
for i:=1 to n-1 do
for j:=i+1 to n do begin
d:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
if (dist[i,j]=0)and((ans=0)or(ans>m[i]+m[j]+d)) then
ans:=m[i]+m[j]+d;
end;
for i:=1 to n do ans:=max(ans,m[i]);
writeln(ans:0:6);
end.
浙公网安备 33010602011771号