Pagini recente » Cod sursa (job #516219) | Cod sursa (job #1769155) | Cod sursa (job #202835) | Cod sursa (job #1097785) | Cod sursa (job #51346)
Cod sursa(job #51346)
#include <stdio.h>
#define AMAX 10050
#define NMAX 410
#define MMAX 100010
#define B 30
int A[AMAX][NMAX], Cs[MMAX], Cd[MMAX], N, M;
int V[(1<<16)+2], mat[1010][1010];
int main()
{
int i, j, k, g, p, l, num = 0, ok;
freopen("triplete.in", "r", stdin);
scanf("%d %d", &N, &M);
for (i = 0, l = (1<<16); i < l; i++, num = 0)
{
for (j = 0; j < 16; j++) num += ((i>>j)&1);
V[i] = num;
}
for (k = 0; k < M; k++)
{
scanf("%d %d", &i, &j);
if (i>1000 && j>1000) ok = 1;
ok = (mat[i][j]+mat[j][i] == 0);
if (ok == 1)
{
Cs[k] = i; Cd[k] = j;
p = j/B; g = j%B;
A[i][p] += (1<<g);
p = i/B; g = i%B;
A[j][p] += (1<<g);
mat[i][j] = mat[j][i] = 1;
}
}
k = N/B;
for (i = num = 0; i < M; i++)
for (j = 0, p = A[ Cs[i] ][j]&A[ Cd[i] ][j], l = p>>15, num += V[l], l = p&((1<<15)-1), num += V[l]; j <= k; j++, p = A[ Cs[i] ][j]&A[ Cd[i] ][j], l = p>>15, num += V[l], l = p&((1<<15)-1), num += V[l]);
freopen("triplete.out", "w", stdout);
printf("%d\n", num/3);
return 0;
}