Cod sursa(job #465861)

Utilizator netedu_andreiFII Andrei Netedu netedu_andrei Data 25 iunie 2010 13:38:27
Problema Mesaj4 Scor 0
Compilator fpc Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 2.3 kb
var f,g:text;
    i,n,m,pp,cr,cra,aux,aux2,min,max,maxp:longint;
    a,b,c,d,de,auxv:array[-1..100000]of longint;
procedure ajt(x:longint);
var auxer:longint;
begin
writeln(g,x,' ',de[x]);
auxer:=de[x];
de[x]:=-1;
if de[auxer]<>-1 then begin
                      ajt(auxer);
                      end;
end;
procedure ajt2(x:longint);
begin
if a[a[x]]<>-1 then begin
                      ajt2(a[x]);
                      end;
writeln(g,a[x],' ',x);
a[x]:=-1;
end;
begin
assign(f,'mesaj4.in');reset(f);
assign(g,'mesaj4.out');rewrite(g);
readln(f,n,m);
for i:=1 to m do
    begin
    readln(f,a[i],b[i]);
    c[a[i]]:=c[a[i]]+1;
    c[b[i]]:=c[b[i]]+1;
    d[i]:=i;
    end;
for i:=1 to n do
    if c[i]>max then begin
                     max:=c[i];
                     maxp:=d[i];
                     end;
pp:=maxp;
de[pp]:=-1;
aux:=n-1;
for i:=1 to m do
    auxv[i]:=i+1;
min:=1;
while aux2<aux do
      begin
      cr:=min;
      while cr<=m do
            begin
            if de[b[cr]]<>0 then begin
                                 if de[a[cr]]=0 then
                                    begin
                                    de[a[cr]]:=b[cr];
                                    aux2:=aux2+1;
                                    end;
                                 if cr=min then min:=auxv[cr]
                                 else auxv[cra]:=auxv[cr];
                                 end
            else if de[a[cr]]<>0 then begin
                                      if de[b[cr]]=0 then
                                         begin
                                         aux2:=aux2+1;
                                         de[b[cr]]:=a[cr];
                                         end;
                                      if cr=min then min:=auxv[cr]
                                      else auxv[cra]:=auxv[cr];
                                      end;
            cra:=cr;
            cr:=auxv[cr];
            end;
      end;
writeln(g,(n-1)*2);
for i:=1 to n do
     auxv[de[i]]:=-1;
a:=de;
i:=1;
while i<=n do
    begin
    if (de[i]<>-1) and (auxv[i]<>-1) then ajt(i);
    i:=i+1;
    end;

i:=1;
while i<=n do
    begin
    if (a[i]<>-1) and (auxv[i]<>-1) then ajt2(i);
    i:=i+1;
    end;
close(g);
end.