Pagini recente » Cod sursa (job #470699) | Cod sursa (job #485285) | Cod sursa (job #1613284) | Cod sursa (job #1297687) | Cod sursa (job #14506)
Cod sursa(job #14506)
#include <stdio.h>
#define INF "triplete.in"
#define OUF "triplete.out"
#define NMAX 4096
int mask[32],bit[NMAX][128]={0},n,m,lim;
struct muchie
{
int x,y;
}ark[65538];
unsigned long long triplete(int a,int b)
{
register int d,r,i,j,aux;
unsigned long long nr=0;
for(i=0;i<lim;i++)
{
aux=bit[a][i]&bit[b][i];
for(j=0;j<32;j++)
if(aux&mask[j]) nr++;
}
return nr;
}
int main()
{
int i,j,a,b,d,r;
unsigned long long sum=0;
FILE *in,*out;
in=fopen(INF,"r");
out=fopen(OUF,"w");
fscanf(in,"%d %d",&n,&m);
mask[0]=1;lim=n/32+1;
if(lim>128) lim=128;
for(i=1;i<32;i++) mask[i]=(1<<i);
for(i=1;i<=m;i++)
{
fscanf(in,"%d %d",&a,&b);
a--;b--;// 0 indexing
d=b/32;r=b%32;//printf("%d %d\n",d,r);
bit[a][d]=bit[a][d]|mask[r];// b in lista lui a
d=a/32;r=a%32;//printf("%d %d\n",d,r);
bit[b][d]=bit[b][d]|mask[r];// a in lista lui b
ark[i].x=a;ark[i].y=b;
}
for(i=1;i<=m;i++)
sum+=triplete(ark[i].x,ark[i].y);
sum=sum/3;
fprintf(out,"%lld",sum);
fclose(in);fclose(out);
return 0;
}