Cod sursa(job #8401)

Utilizator MariusMarius Stroe Marius Data 24 ianuarie 2007 18:42:14
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
using namespace std;

const char iname[] = "triplete.in";
const char oname[] = "triplete.out";

#define MAX_N 4096
#define MAX_M 65536

int A[MAX_N][257];

int L[MAX_M][2];

int cnt[1 << 16];


int main(void) {
	freopen(iname, "r", stdin);
	int N;
	int M;
	int i, x, y, k, Res = 0;
	for (scanf("%d %d", & N, & M), i = 0; i < M; ++i) {
		scanf("%d %d", & x, & y);
		x--, y--;
		A[x][y >> 4] |= (1 << (y & 15));
		A[y][x >> 4] |= (1 << (x & 15));
		L[i][0] = x;
		L[i][1] = y;
	}
	for (int byte = 0; byte < 1 << 16; ++byte) 
		for (i = 0; i < 16; ++i)
			cnt[byte] += ((byte & (1 << i)) > 0);
	for (i = 0; i < M; ++i) {
		x = L[i][0];
		y = L[i][1];
		for (k = 0; k < 257; ++k)
			Res += cnt[A[x][k] & A[y][k]];
	}
	freopen(oname, "w", stdout);
	printf("%d\n", Res / 3);
	return 0;
}