这个是个水得不能再水的MST,可是我还WA了两次,原因如下
1.没有看到The input includes several cases.
2.把调试用的无用信息输出到了结果里(呃……脑残了)
引以为戒~~~~~
Const
maxn=500;
Var
codes:array[1..maxn,1..2]of longint;
d:array[1..maxn,1..maxn]of longint;
lowcost,pre:array[1..maxn]of longint;
i,j,n:longint;
Procedure prim;
var
dist,sum,min,q,x,y:int64;
i,j,k:longint;
begin
sum:=0;
lowcost[1]:=-1;
for i:=2 to n do
begin
lowcost[i]:=d[1,i];
pre[i]:=1;
end;
for i:=1 to n-1 do
begin
min:=maxlongint;
for k:=1 to n do
begin
if (lowcost[k]<>-1)and(lowcost[k]<min) then
begin
j:=k;
min:=lowcost[k];
end;
end;
sum:=sum+min;
lowcost[j]:=-1;
for k:=1 to n do if d[j,k]<lowcost[k] then
begin
lowcost[k]:=d[j,k];
pre[k]:=j;
end;
end;
writeln(sum);
end;
BEgin
while not eof do
begin
readln(n);
fillchar(d,sizeof(d),0);
for i:=1 to n do
begin
for j:=1 to n do
read(d[i,j]);
readln;
end;
prim;
end;
End.