Cod sursa(job #153877)

Utilizator znakeuJurba Andrei znakeu Data 10 martie 2008 19:45:36
Problema Triplete Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#define MAXN 4096
#define MAXNb 256
#define MAXV 65536
struct prieteni
{
	int a,b;
};

prieteni v[MAXN+2];
int m,n,V[MAXN+2][MAXNb+2];
int c[MAXV+1];
int rez=0;
int k[20];

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

	int i,j,t,z,a,b;
	
	k[0]=1;
	for (i=1; i<17; i++)
		k[i]=k[i-1]<<1;
	for(i = 1; i < MAXV+1; i++)
		c[i] = c[i>>1]+(i&1);
	
	scanf("%d%d",&n,&m);
	
	for (i=0; i<m; i++)
	{
		scanf("%d%d",&a,&b);
		v[i].a=a;
		v[i].b=b;
		V[a][b/16]+=k[b%16];
		V[b][a/16]+=k[a%16];		
	}
	
	t=n/16+1;
	
	for (i=0; i<m; i++)
	{
		a=v[i].a;
		b=v[i].b;
		for (j=0; j<t; j++)
		{
			z= V[a][j] & V[b][j];
			rez+=c[z];			
		}
	}
	
	printf("%d\n",rez/3);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}