Cod sursa(job #447518)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 28 aprilie 2010 22:23:33
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#include<string.h>
#define biti 16

int n,m,nrsol;

struct que
{
	int x,y;
};
que q[70005];
int v[5003][351];
int sol;
char nrb[1000004];

int main ()
{
	int a,b,i,j,ci;
	freopen("triplete.in","r",stdin);
	freopen("triplete.out","w",stdout);
	scanf("%d%d",&n,&m);
    for(i=1;i<=(1<<16);i++)
    {
        ci=i;
        while(ci)
        {
            nrb[i]+=ci&1;
            ci/=2;
        }
    }
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&q[i].x,&q[i].y);	
		a=q[i].x;
		b=q[i].y;
        v[a][b/biti]+=(1<<(b%biti));
        v[b][a/biti]+=(1<<(a%biti));
	}
	for(i=1;i<=m;i++)
		for(j=0;j<=n/biti;j++)
        {
            sol=(v[q[i].x][j]&v[q[i].y][j]);
            nrsol+=nrb[sol];
        }
	printf("%d\n",nrsol/3);
	return 0;
}