Cod sursa(job #1488157)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 17 septembrie 2015 23:48:12
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <algorithm>

#define DIM1 4100
#define DIM2 66000
#define BASE 16
using namespace std;

int N, M, X, Y, sol;
int V[DIM2], W[DIM2];
int P[DIM2];
int A[DIM1][DIM1/BASE];

int main(){

	freopen("triplete.in" ,"r", stdin );
	freopen("triplete.out","w", stdout);

	scanf("%d %d", &N, &M);

	for(int i = 1; i <= (1<<BASE); i ++)
		P[i] = P[i/2] + (i % 2);
	
	for(int i = 1; i <= M; i ++){
		scanf("%d %d", &V[i], &W[i]);

		if(V[i] > W[i]) 
			swap(V[i], W[i]);

		A[V[i]][W[i] / BASE] += (1 << (W[i] % BASE));
	}

	for(int i = 1; i <= M; i ++){
		for(int j = 0; j <= N / BASE; j ++)
			sol += P[ A[ V[i] ][j] & A[ W[i] ][j] ];
	}

	printf("%d\n", sol);

	fclose(stdin );
	fclose(stdout);

	return 0;
}