劍魚行動 倆種方法 !!!

2021-07-29 22:19:38 字數 2289 閱讀 4806

劍魚行動

time limit:10000ms  memory limit:65536k

total submit:93 accepted:79 

case time limit:1000ms

description

給出n個點的座標,對它們建立乙個最小生成樹,代價就是連線它們的路徑的長度,現要求總長度最小。n的值在100以內,座標值在[-10000,10000].結果保留二位小數

input

5 ---------------5個點

0 0 ---------------5個點點的座標 

0 1 

1 1 

1 0 

0.5 0.5 

output

2.83

sample input

sample output

source

zju

這一題和最小生成樹一樣。但輸入變一下,輸出保留兩位小數、

var   

n,i,j,k,t:longint;

min,ans:real;

x,y,v:array[0..101]of real;

a:array[0..101,0..101]of real;

begin

readln(n);

for i:=1 to n do

begin

readln(x[i],y[i]);

for j:=1 to i-1 do

begin

a[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));

a[j,i]:=a[i,j];

end;

end;

fillchar(v,sizeof(v),#0);

v[1]:=1;

for i:=1 to n-1 do

begin

min:=maxlongint;

for j:=1 to n do

if v[j]=1 then

for k:=1 to n do

if v[k]=0 then

if (a[j,k]0) then

begin

min:=a[j,k];

t:=k;

end;

if min<>maxlongint then

begin

ans:=ans+min;

v[t]:=1;

end;

end;

write(ans:0:2);

end.

方法2:(本方法從集合變成廣搜(擦不多),就是把每乙個點關聯起來,每列舉乙個點就更新(同化)父節點);

varn,i,j,k,q,p,t:longint;

tj,min:real;

x,y:array[0..200]of real;

f:array[0..200]of longint;

a:array[0..200,0..200]of real;

begin

readln(n);

for i:=1 to n do

readln(x[i],y[i]);

for i:=1 to n do

begin

for j:=1 to n do

begin

a[i,j]:=sqrt(sqr(x[i]-x[j])+sqr(y[i]-y[j]));

end;

end;

tj:=0;

for i:=1 to n do

f[i]:=i;

for k:=1 to n-1 do

begin

min:=maxlongint;

for i:=1 to n do

for j:=1 to n do

if (f[i]<>f[j])and(a[i,j]0) then

begin

min:=a[i,j];

p:=j;

q:=i;

end;

tj:=tj+min;

t:=f[p];

for i:=1 to n do

if f[i]=t then f[i]:=f[q];

end;

write(tj:0:2);

end.

劍魚行動 題解

給出n個點的座標,對它們建立乙個最小生成樹,代價就是連線它們的路徑的長度,現要求總長度最小。n的值在100以內,座標值在 10000,10000 結果保留二位小數 第一行 n nn 點的個數 接下來 n nn 行,n nn 個點的座標 最小總長度 inpu 50 0 0 11 1 1 00.5 0....

並查集 Kruskal 劍魚行動

ssl 1618 給出n個點的座標,對它們建立乙個最小生成樹,代價就是連線它們的路徑的長度,現要求總長度最小。n的值在100以內,座標值在 10000,10000 結果保留二位小數 5 0 0 0 1 1 1 1 0 0.5 0.52.83用kru skal kruskal kruska l演算法做...

ssl1618 劍魚行動

劍魚行動 time limit 10000ms memory limit 65536k total submit 103 accepted 86 case time limit 1000ms description 給出n個點的座標,對它們建立乙個最小生成樹,代價就是連線它們的路徑的長度,現要求總長...