Cod sursa(job #28161)

Utilizator izso88istvan zsolt izso88 Data 7 martie 2007 15:49:22
Problema Triplete Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 3.5 kb
const fff=4100;
type pe=^te;
     te=record
              ert:integer;
              kov:pe;
              end;
     rrr=array[0..fff] of longint;

var  ad:array[1..fff] of pe;
     men,kkk,hasz,sor,bup:rrr;
     t:text;
     p,y:pe;
     i,j,k,n,m,mma:longint;
     hany:longint;

procedure QuickSort(var a,b:rrr);

procedure Sort(l, r: Integer);
var
  i, j, x, y: integer;
begin
  i := l; j := r; x := a[(l+r) DIV 2];
  repeat
    while a[i] < x do i := i + 1;
    while x < a[j] do j := j - 1;
    if i <= j then
    begin
      y := a[i];
      a[i] := a[j];
      a[j] := y;
      y := b[i];
      b[i] := b[j];
      b[j] := y;
      i := i + 1; j := j - 1;
    end;
  until i > j;
  if l < j then Sort(l, j);
  if i < r then Sort(i, r);
end;

begin {QuickSort};
  Sort(1,n);
end;


procedure df(hol,kezd,szint:integer);
          var e:pe;
          begin
          if (szint=3) and (kezd=hol) then inc(men[kezd])
          else
          if ((szint>0)and (szint<3)) and (kezd=hol) then begin end else
          if szint<3 then begin
                          e:=ad[hol];
                          while e^.kov<>nil do begin
                          e:=e^.kov;
                           if hasz[e^.ert]=1 then
                            if kkk[e^.ert]>1 then
                             df(e^.ert,kezd,szint+1);
                          end;
                          end;
          end;

begin
     assign(t,'triplete.in');
     reset(T);
      read(t,n,m);
      hany:=0;
      mma:=0;
     for i:=1 to n do kkk[i]:=0;

     for i:=1 to n do begin
                      new(ad[i]);
                      ad[i]^.ert:=0;
                      ad[i]^.kov:=nil;
                      end;
     for i:=1 to m do begin
                      read(t,j,k);
                      p:=ad[j];
                      while p^.kov<>nil do p:=p^.kov;
                      new(y);
                      y^.ert:=k;
                      Y^.kov:=nil;
                      p^.kov:=y;
                      inc(kkk[j]);

                      p:=ad[k];
                      while p^.kov<>nil do p:=p^.kov;
                      new(y);
                      y^.ert:=j;
                      Y^.kov:=nil;
                      p^.kov:=y;
                      inc(kkk[k]);

                      end;

     close(T);
{     mma:=kkk[1];
     for i:=2 to n do if kkk[i]>mma then mma:=kkk[i];}

     for i:=1 to n do if kkk[i]=1 then hasz[i]:=0;
     bup:=kkk;
     for i:=1 to n do kkk[i]:=-1*kkk[i];
     for i:=1 to n do sor[i]:=i;
     quicksort(kkk,sor);
     kkk:=bup;

     for i:=1 to n do men[i]:=0;
     for i:=1 to n do hasz[i]:=1;

{     for k:=mma downto 2 do}
     for i:=1 to n do {if kkk[i]=k then }
                        if hasz[i]=1 then
                      begin
                      df(sor[i],sor[i],0);
                      {if men[i]>0 then begin}
                                       hasz[sor[i]]:=0;
                                       p:=ad[sor[i]];
                                       while p^.kov<>nil do
                                       begin
                                       p:=p^.kov;
                                       kkk[p^.ert]:=kkk[P^.ert]-1;
                                      end;
{                      end;}
                      end;

     hany:=0;
     for i:=1 to n do hany:=hany+(men[i]);

     assign(t,'triplete.out');
     rewrite(T);
       writeln(t,hany div 2);
     close(T);

end.