Pagini recente » Cod sursa (job #538931) | Istoria paginii runda/summah | Cod sursa (job #189733) | Cod sursa (job #2674764) | Cod sursa (job #8046)
Cod sursa(job #8046)
#include <stdio.h>
#define NMAX 4096
#define MMAX 66000
#define B 32
#define P 5
struct per { int x, y; } V[MMAX];
int A[NMAX][NMAX/32];
int i, j, N, M, a, b;
long long rez;
inline void set(int cnf,int x)
{
A[cnf][x>>P] |= 1 << (x & (B-1));
}
inline int bit_p(int b, int poz)
{
if (b & 1<<poz) return 1;
return 0;
}
int afla_1(int x)
{
int i, s = 0;
for (i = 0; i < B; i++)
if (bit_p(x, i)) s++;
return s;
}
int main()
{
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
scanf("%d %d", &N, &M);
if (N == 1) { printf("0\n"); return 0; }
if (N == 2) { printf("0\n"); return 0; }
if (N == 3 && M != 3) { printf("0\n"); return 0;}
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);
}
for (i = 1; i <= M; i++)
{
a = V[i].x;
b = V[i].y;
for (j = 0; j <= N/B; j++) rez += afla_1(A[a][j] & A[b][j]);
}
printf("%lld\n", rez/3);
return 0;
}