Cod sursa(job #154607)

Utilizator znakeuJurba Andrei znakeu Data 11 martie 2008 12:24:53
Problema Secventa 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#define MAXN 5000
#define WTF 300
#define MAXV 70000
struct friends
{
	int a, b;
};

friends v[MAXV];
int V[MAXN][WTF];
int p2[20];
int count[MAXV];

int main()
{
	freopen("triplete.in","r",stdin);
	freopen("triplete.out","w",stdout);
	
	int i=0,j=0,m=0,n=0,a=0,b=0,t=0,rez=0,z=0;
	
	p2[0]=1;
	for (i=1; i<20; i++)
		p2[i]=p2[i-1]<<1;
	
	for (i=1; i<MAXV; i++)
		count[i]=count[i>>1]+ (i & 1);
	
	scanf("%d%d",&n,&m);
	
	for (i=0; i<m; i++)
	{
		scanf("%d%d",&v[i].a,&v[i].b);
		V[v[i].a][v[i].b>>4]=V[v[i].a][v[i].b>>4] | p2[v[i].b & 15];
		V[v[i].b][v[i].a>>4]=V[v[i].b][v[i].a>>4] | p2[v[i].a & 15];
	}
	
	t=n/16;
	t++;
	
	for (i=0; i<m; i++)
	{
		a=v[i].a;
		b=v[i].b;
		
		for (j=0; j<t; j++)
		{
			z=0;
			z=V[a][j] & V[b][j];
			rez+=count[z];			
		}	
	}
	
	rez/=3;
	
	printf("%d\n",rez);
	
	fclose(stdin);
	fclose(stdout);
	return 0;	
}