Какой алгоритм реализует приведенная ниже программа?
const nnn=10000;type s1 = ^s2; s2 = record n,k,v: integer; next: s1; end;var f: text; head,p,q: s1; x,i,kr,vr,nxt,kol_ver: integer; a: array[1..nnn] of integer;begin assign(f,'in'); reset(f); readln(f,kol_ver); new(head); with head^ do readln(f,n,k,v); head^.next:= nil; while not eof(f) do begin new(q); with q^ do readln(f,n,k,v); q^.next:= nil; if q^.v <= head^.v then begin q^.next:= head; head:= q; continue end; p:= head; while p^.next<>nil do begin if q^.v > p^.next^.v then p:= p^.next else begin q^.next:= p^.next; p^.next:= q; break; end; end; if p^.next = nil then p^.next:= q; end; close(f);p:=head;while p<>nil do beginwrite(p^.v,' '); p:=p^.next;end;writeln('*'); for i:= 1 to kol_ver do a[i]:= 0; kr:= 0; vr:= 0; nxt:= 0; p:= head; while (p^.next <> nil)and(kr<kol_ver)do with p^ do begin if a[n]=0 then if a[k]=0 then begin inc(kr); inc(vr,v); inc(nxt); a[n]:= nxt; a[k]:= nxt; end else begin a[n]:= a[k]; inc(vr,v); end else if a[k]=0 then begin a[k]:= a[n]; inc(vr,v); end else if a[n]<>a[k] then begin x:= a[k]; for i:= 1 to kol_ver do if a[i]=x then a[i]:=a[n]; inc(vr,v) end; p:= next end; writeln(vr)end.