Pagini recente » Cod sursa (job #390846) | Cod sursa (job #2024385) | Cod sursa (job #2158148) | Istoria paginii utilizator/cnmv_seritan_dumitrescu_munteanu | Cod sursa (job #28137)
Cod sursa(job #28137)
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.