Pagini recente » Cod sursa (job #3287836) | Cod sursa (job #3005226) | Cod sursa (job #2770053) | Cod sursa (job #1656033) | Cod sursa (job #8225)
Cod sursa(job #8225)
#include <stdio.h>
#define NMAX 4096
#define MMAX 66000
struct per { int x, y; } V[MMAX];
unsigned int Nr[1 << 17];
unsigned int A[NMAX][ (NMAX/32) + 2];
int i, j, N, M, a, b;
unsigned int cfg;
long long rez;
void set(int cnf, int x)
{
A[cnf][x>>5] |= (unsigned int)1 << (x & 31);
}
void prep()
{
int i;
Nr[0] = 0;
for (i = 1; i <= (1 << 16); i++)
Nr[i] = Nr[(unsigned int)i >> 1] + ((unsigned int)i&1);
}
int main()
{
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
scanf("%d %d", &N, &M);
rez = 0;
for (i = 1; i <= M; i++)
{
scanf("%d %d", &a, &b);
V[i].x = a;
V[i].y = b;
set(a, b);
set(b, a);
}
prep();
for (i = 1; i <= M; i++)
{
a = V[i].x;
b = V[i].y;
for (j = 0; j <= 128; j++)
{
cfg = (unsigned int)(A[a][j] & A[b][j]);
rez += Nr[cfg & ((1<<16) - 1)] + Nr[cfg >> 16];
}
}
rez = (long long)rez/3;
printf("%lld\n", rez);
return 0;
}