Cod sursa(job #11198)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 30 ianuarie 2007 20:57:14
Problema Triplete Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include <stdio.h>

#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define nmax 4096
#define mmax 65536
#define g(x) ((x)>>5)
#define f(x) ((x)&31)

typedef unsigned int lint;

lint A[nmax][nmax];
int B[mmax][2],n,m,sol;

void Add(int i,int j)
{
	A[i][g(j)]|=((lint)(1))<<((lint)f(j));
}

int nbit(lint x)
{
	if(!x)
		return 0;
	return 1+nbit(x&(x-1));
}

int main()
{
	int i,j,ii;
	freopen("triplete.in","r",stdin);
	freopen("triplete.out","w",stdout);
	scanf("%d %d",&n,&m);
	
	FOR(ii,0,m)
	{
		scanf("%d %d",&i,&j);i--,j--;
		B[ii][0]=i,B[ii][1]=j;
		Add(i,j),Add(j,i);
	}
	FOR(ii,0,m)
		FOR(i,0,g(n-1)+1)
			sol+=nbit(A[B[ii][0]][i]&A[B[ii][1]][i]);
	printf("%d\n",sol/3);
	return 0;
}