Cod sursa(job #200529)

Utilizator CezarMocanCezar Mocan CezarMocan Data 24 iulie 2008 14:39:50
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <algorithm>

using namespace std;

long n,m,a,b,i,j,v[4097][258],g,p,sol;
long x[65537],y[65537],b2[65537];

int main(){
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
b2[0]=0;
b2[1]=1;
for (i=2;i<(1<<16);i++)
    {
    if (i&1)
        b2[i]=b2[i>>1]+1;
    else
        b2[i]=b2[i>>1];   
    }
scanf("%d%d",&n,&m);
for (i=1;i<=m;i++)
    {
    scanf("%d%d",&a,&b);
    //il marchez pe b ca vecin al lui a
    g=(b-1)/16;
    p=((b-1)&15)+1;
    v[a][g]=v[a][g]|(1<<(16-p));
    //il marchez pe a ca vecin al lui b
    g=(a-1)/16;
    p=((a-1)&15)+1;
    v[b][g]=v[b][g]|(1<<(16-p));    
    x[i]=a;
    y[i]=b;
    }
for (i=1;i<=m;i++)
    {
    for (j=0;j<=256;j++)    
        sol+=b2[v[x[i]][j]&v[y[i]][j]];
    }
printf("%d\n",sol/3);
return 0;
}