Cod sursa(job #190672)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 23 mai 2008 19:50:59
Problema Triplete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>

#define Nmax 4000
#define Mmax 60800
#define IN "triplete.in"
#define OUT "triplete.out"

short int nod[Nmax],xx[Mmax],yy[Mmax];
int nr,nrm,n,m;
unsigned char a[Nmax][Nmax/7];

void proba()
{
	for(int i=0;i<n;++i){
		for(int j=0;j<=n/8;++j)
			for(int k=0;k<8;++k)
				printf("%d ",a[i][j]&(1<<k));
		printf("\n");
	}
	printf("\n");
}

void scan()
{
	
	int x,y;
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	
	scanf("%d%d", &n,&m);
	for(int i=1;i<=m;++i)
	{	
		scanf("%d%d", &x,&y);
		--x;
		--y;
		++nod[x];
		++nod[y];
		xx[++nr]=x;
		yy[nr]=y;
		//a[x][ (y>>3) + (y&7)  ]=a[y][ (x>>3) + (x&7)  ]=1;
		a[x][y/8] |= 1<<(y%8);
		a[y][x/8] |= 1<<(x%8);
	}
	//proba();
}

void solve()
{
	int x,rez=0;
	/*
	for(int i=1;i<=m;++i)  
        for(int k=1;k<=n;++k)  
            if(a[ xx[i] ][ (k>>3) + (k&7) ] && a[ yy[i] ][ (k>>3) + (k&7) ])  
                ++rez;  	
	*/
	for(int i=1;i<=m;++i)  
        for(int k=0;k<=n/8;++k)
		{
			x=a[xx[i]][k] & a[yy[i]][k];
			while(x)
			{
				++rez;
				x&=(x-1);
			}
		}
	printf("%d", rez/3);
}

int main()
{
	scan();
	solve();
	return 0;
}