Pagini recente » Cod sursa (job #3231919) | Cod sursa (job #1136169) | Cod sursa (job #2696696) | Cod sursa (job #2947601) | Cod sursa (job #80578)
Cod sursa(job #80578)
# include <stdio.h>
const long int NRBITI=30;
const long int MAM=4096;
const long int MAXN=MAM/NRBITI;
const long int MAXX=MAM;
const long int MAXMUC=100000;
long int a[MAXX+4][MAXN+4],n,m;
long long int sol;
long int nrbiti[MAXMUC+1];
long int nrbiti1(long int a)
{return nrbiti[a&(((long int)1<<17)-1)]+nrbiti[a>>16];}
void add(long int loc,long int inf)
{
long int adaos=0;
if (inf%NRBITI==0) adaos=1;
a[loc][inf/NRBITI+1-adaos]|=(long int)1<<(inf%NRBITI);
}
void citire()
{
long int aa,bb;
FILE *f=fopen("triplete.in","r");
fscanf(f,"%ld%ld",&n,&m);
long int i;
for (i=1;i<=m;i++)
{
fscanf(f,"%ld%ld",&aa,&bb);
add(aa,bb);
add(bb,aa);
}
fclose(f);
}
void init() {long int i;for (i=1;i<=1<<17;i++) nrbiti[i]=nrbiti[i&(i-1)]+1;}
void calculeaza()
{
FILE *f=fopen("triplete.in","r");
fscanf(f,"%ld%ld",&n,&m);
long int i,aa,bb,j;
for (i=1;i<=m;i++)
for (j=1;j<=n/NRBITI+1;j++)
{
fscanf(f,"%ld%ld",&aa,&bb);
sol+=nrbiti1(a[aa][j]&a[bb][j]);
}
FILE *g=fopen("triplete.out","w");
fprintf(g,"%lld\n",sol/3);
fcloseall();
}
int main()
{
citire();
init();
calculeaza();
return 0;
}