Cod sursa(job #14413)

Utilizator andrei_infoMirestean Andrei andrei_info Data 8 februarie 2007 22:39:59
Problema Triplete Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.36 kb
//triplete

const nmax= 4096;
      bb = 60;
type pnod = ^tnod;
     tnod = record
                x:integer;
                next:pnod;
                end;
     rr = record
        head,last:pnod;
        end;
     xx =record
        x,y:integer;
        end;
var nod : array[1..nmax,0..(nmax div bb)+1] of int64;
    edge : array[1..65540]of xx;
    rez,n,m:longint;

procedure add(x,y:integer);
var aux : int64;
begin
aux:= 1 shl (y mod bb);
nod[x][y div bb] := nod[x][y div bb] + aux;
end;

procedure citire;
var i:longint;
    x,y:integer;
begin
assign(input,'triplete.in'); reset(input);
readln(n,m);
for i:=1 to m do
        begin
        readln(x,y);
        add(x,y);
        add(y,x);
        edge[i].x:=x; edge[i].y:=y;
        end;
close(input);
end;

function numara(x,y:integer):integer;
var i,aux:integer;
    r,j:int64;
begin
r:=0; aux:=0;
for i:=0 to (n div bb) + 1 do
        begin
        r:= nod[x][i] and nod[y][i];
        j:=1 shl bb;
        {repeat
        if j and r <> 0 then inc(aux);
        j:=j shr 1;
        until j = 0;}
        end;
numara:=aux;

end;

procedure calc;
var i:longint;
begin
for i:=1 to m do
                        rez:=rez+numara(edge[i].x,edge[i].y);
end;

begin
citire;
calc;
assign(output,'triplete.out'); rewriTe(output);
writeln(rez div 3);
close(output);
end.