Pagini recente » Cod sursa (job #1238579) | Cod sursa (job #193111) | Cod sursa (job #1478929) | Cod sursa (job #2948343) | Cod sursa (job #380621)
Cod sursa(job #380621)
{apm kruskal cu paduri}
type muchie=record
x,y:longint;
c:integer;
end;
var u:array[1..200000] of muchie;
tata,h:array[1..400000] of longint;
sol:array[1..200000,1..2] of longint;
n,m,k,cost:longint;
procedure citire;
var i:longint;
begin
assign(input,'apm.in'); reset(input);
readln(n,m);
for i:=1 to m do readln(u[i].x,u[i].y,u[i].c);
close(input);
end;
procedure qsort(l,r:longint);
var i,j:longint;
x:integer;
aux:muchie;
begin
i:=l;
j:=r;
x:=u[(i+j) div 2].c;
repeat
while u[i].c<x do inc(i);
while x<u[j].c do dec(j);
if i<=j then
begin
aux:=u[i];
u[i]:=u[j];
u[j]:=aux;
inc(i);
dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if j>l then qsort(l,j);
end;
function radacina(x:longint):longint;
var rad:longint;
begin
rad:=x;
while tata[rad]<>0 do rad:=tata[rad];
radacina:=rad;
end;
procedure unificare(x,y:longint);
begin
if h[x]>h[y] then tata[y]:=x
else tata[x]:=y;
if h[x]=h[y] then inc(h[y]);
end;
procedure kruskal;
var i,im,jm:longint;
begin
k:=0;
cost:=0;
while k<n-1 do
begin
im:=radacina(u[i].x);
jm:=radacina(u[i].y);
if im<>jm then
begin
cost:=cost+u[i].c;
inc(k);
sol[k,1]:=u[i].x;
sol[k,2]:=u[i].y;
unificare(im,jm);
end;
inc(i);
end;
end;
procedure afisare;
var i:longint;
begin
assign(output,'apm.out'); rewrite(output);
writeln(cost);
writeln(k);
for i:=1 to k do writeln(sol[i,1],' ',sol[i,2]);
close(output);
end;
begin
citire;
qsort(1,m);
kruskal;
afisare;
end.