Cod sursa(job #16686)

Utilizator m_dersidanDersidan Mihai m_dersidan Data 13 februarie 2007 21:04:46
Problema Triplete Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
# include <stdio.h>

# define  maxn  4198
# define  maxm  61536

# define  isize 30

# define  _fin  "triplete.in"
# define  _fout "triplete.out"


int ad[maxn][maxn / isize];
int mc[maxm][2], m, n, sol;


int addv(int x, int y)
{
	int list = y / isize, ord = y % isize;
	
	ad[ x ][ list ] |= ( 1 << ord );
}

int bits1(int x)
{
	int i, c, ret=0;
	
	for (i=1, c=0; c<=isize && i<=x; i<<=1, c++)
		ret += !!( x & i );
		
	return ret;
}

void readf()
{
	freopen(_fin, "r", stdin);
	int i, x, y;
	
	for (scanf("%d %d", &n, &m), i=0; i<m; i++)
		 scanf("%d %d", &x, &y), addv(x, y), addv(y, x), mc[i][0]=x, mc[i][1]=y;
}

void solve()
{
	int i, j;
	
	for (i=0; i<m; i++)
		for (j=0; j<=n/isize; j++)
			sol += bits1( ad[ mc[i][0] ][j] & ad[ mc[i][1] ][j] );
	sol /= 3;
}

void writef()
{
	freopen(_fout, "w", stdout);
	printf("%d\n", sol);
}

int main()
{
	readf();
	solve();
	writef();
	
	return 0;
}