Cod sursa(job #303141)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 9 aprilie 2009 16:25:58
Problema Arbore partial de cost minim Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.4 kb
type muchie =record
        x,y,c:longint;
             end;
var v:array[1..400000] of longint;
    viz:array[1..200000] of 0..1;
    u:array[1..400000] of muchie;
    nr,lv,vv,w,j,n,m,i,ct:longint;
procedure pivot(s,d:longint; var mi:longint);
   var ii,jj,pi,pj,au:longint;
       aux:muchie;
   begin
     ii:=s; jj:=d; pi:=0; pj:=1;
     while ii<jj do
       begin
         if u[ii].c>u[jj].c then
           begin
             aux:=u[ii]; u[ii]:=u[jj]; u[jj]:=aux;
             au:=pi; pi:=pj; pj:=au;
           end;
         ii:=ii+pi; jj:=jj-pj;
       end;
     mi:=ii;
   end;

procedure sort(s,d:longint);
   var mi:longint;
   begin
     if s<d then
       begin
         pivot(s,d,mi);
         sort(s,mi-1); sort(mi+1,d);
       end;
   end;
begin
assign(input,'apm.in'); reset(input);
assign(output,'apm.out'); rewrite(output);
readln(n,m);
for i:=1 to m do readln(u[i].x,u[i].y,u[i].c);
sort(1,m);
for i:=1 to n do viz[i]:=i;
ct:=u[1].c; viz[u[1].x]:=u[1].y;
v[1]:=1; lv:=1; nr:=2;
i:=2;
while nr<n do
  begin
    if viz[u[i].x]<>viz[u[i].y] then
       begin
         inc(nr);ct:=ct+u[i].c;
         inc(lv); v[lv]:=i;
         vv:=viz[u[i].x]; w:=viz[u[i].y];
         for j:=1 to n do if viz[j]=w then viz[j]:=vv;
       end;
    inc(i);
  end;
writeln(ct);
writeln(lv);
for i:=1 to lv do writeln(u[v[i]].x,' ',u[v[i]].y);
close(input); close(output);
end.