tyvj P1659 - 中中救援队
P1659 - 中中救援队From 西部314 Normal (OI) 总时限:10s 内存限制:128MB |
||||||||
|---|---|---|---|---|---|---|---|---|
|
||||||||
Delphi语言: 高亮代码由发芽网提供
program tyvj1659;
type node=record
u,v,w:longint;
end;
var b,f:array[1..10000] of longint;
a:array[1..100000] of node;
x,y,ans,min,i,n,k,sum,l:longint;
procedure qsort(head,tail:longint);
var i,j:longint;x:node;
begin
i:=head;j:=tail;x:=a[head];
while i<j do begin
while (i<j)and(a[j].w>=x.w) do dec(j);
a[i]:=a[j];
while (i<j)and(a[i].w<=x.w) do inc(i);
a[j]:=a[i];
end;
a[i]:=x;
if head<i-1 then qsort(head,i-1);
if tail>i+1 then qsort(i+1,tail);
end;
function find(x:longint):longint;
var k:longint;
begin
k:=f[x];
while f[k]<>k do k:=f[k];
exit(k);
end;
procedure union(x,y:longint);
var k1,k2:longint;
begin
k1:=find(x);
k2:=find(y);
f[k1]:=f[k2];
end;
begin
readln(n,k);min:=maxlongint;
for i:=1 to n do begin
readln(b[i]);
if b[i]<min then min:=b[i];
end;
for i:=1 to k do begin
readln(a[i].u,a[i].v,a[i].w);
a[i].w:=a[i].w*2+b[a[i].u]+b[a[i].v];
end;
sum:=0;
qsort(1,k);
l:=0;
for i:=1 to n do f[i]:=i;
while sum<n-1 do begin
inc(l);
x:=find(a[l].u);y:=find(a[l].v);
if x<>y then begin
inc(ans,a[l].w);
union(x,y);
inc(sum);
end;
end;
writeln(ans+min);
end.
浙公网安备 33010602011771号