Cod sursa(job #28137)

Utilizator fogabFodor Gabor fogab Data 7 martie 2007 15:25:53
Problema Triplete Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.34 kb
type pe=^e;
     e=record
       who:word;
       next:pe;
       end;
var f:text;
    i,j,n,m,x,y,k,l:longint;
    a:array[1..4096,1..65] of qword;
    b:array[1..4096] of pe;
    c:array[0..63] of qword;
    used:array[1..4096] of byte;
    h:pe;
    sol:int64;

procedure go(g:word;var sol:int64);
var h2:pe;
    j:byte;
    me:qword;
begin
used[g]:=1;
h2:=b[g]^.next;
while h2<>nil do
  begin
  if used[h2^.who]=0 then
    for j:=1 to k do
      begin
        me:=a[g,j] and a[h2^.who,j];
        while me<>0 do begin
          if me mod 2=1 then inc(sol);
          me:=me shr 1
          end;
      end;
    h2:=h2^.next;
  end;
h2:=b[g]^.next;
while h2<>nil do
  begin
    if used[h2^.who]=0 then go(h2^.who,sol);
    h2:=h2^.next;
  end;

end;

begin
c[0]:=1;
for i:=1 to 63 do c[i]:=c[i-1]*2;
assign(f,'triplete.in');
reset(f);
readln(f,n,m);
for i:=1 to n do begin new(b[i]);b[i]^.next:=nil;end;
for i:=1 to m do begin
  readln(f,x,y);
  k:=(x-1) div 64+1;
  a[y,k]:=a[y,k]+c[(x-1) mod 64];
  k:=(y-1) div 64+1;
  a[x,k]:=a[x,k]+c[(y-1) mod 64];
  new(h);
  h^.who:=x;
  h^.next:=b[y]^.next;
  b[y]^.next:=h;
  new(h);
  h^.who:=y;
  h^.next:=b[x]^.next;
  b[x]^.next:=h;
  end;
close(f);

k:=(n div 64)+1;
go(1,sol);
assign(f,'triplete.out');
rewrite(f);
writeln(f,sol div 6);
close(f);
end.