Cod sursa(job #125468)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 20 ianuarie 2008 12:58:01
Problema Strazi Scor 0
Compilator fpc Status done
Runda preONI 2008, Runda 3, Clasele 11-12 Marime 1.48 kb
var fi,fo:text;
    k,i,j,ct,n,m,ok,nr,ok2,ct2:integer;
    a:array[1..255,1..255]of byte;
    s,drum,drum2,t,st,ap:array[1..255]of byte;
procedure init;
var i:integer;
begin
  for i:=1 to n do
    s[i]:=0;
end;
procedure save(nod:integer);
begin
  if nr<ct then
    begin
      for i:=1 to n do begin
        st[i]:=0; ap[i]:=0; end;
      for i:=1 to ct do
       begin
        drum2[i]:=drum[i];
        st[drum2[i]]:=1;
        ap[drum2[i]]:=1;
       end;
      nr:=ct;
    end;
  ct2:=t[nod];
end;
procedure df(nod:integer);
var i:integer;
begin
  s[nod]:=1;
  ct:=t[nod];
  ok2:=0;
  for i:=1 to n do
   if (a[nod,i]=1)and(s[i]=0) then
     begin
       ok2:=1;
       inc(ct);
       t[i]:=ct;
       drum[ct]:=i;
       ok:=0;
       for k:=1 to n do
         if (a[i,k]=1)and(s[k]=0) then
           begin ok:=1; break; end;
       if ok=0 then
         begin
           init;
           save(nod);
         end;
       df(i);
     end;
   if ok2=0 then
     if ct=1 then save(nod)
             else ct:=ct2;
end;
begin
  assign(fi,'strazi.in'); reset(fi);
  assign(fo,'strazi.out'); rewrite(fo);
  read(fi,n,m);
  for i:=1 to m do
    begin
      read(fi,k,j);
      a[k,j]:=1;
    end;
  drum[1]:=1;
  t[1]:=1;
  df(1);
  writeln(fo,n-nr);
  for i:=1 to n do
    if ap[i]=0 then begin inc(nr); drum2[nr]:=i; writeln(fo,drum2[nr-1],' ',drum2[nr]); end;
  for i:=1 to nr do
    write(fo,drum2[i],' ');
  close(fi);
  close(fo);
end.