Cod sursa(job #27659)

Utilizator ionescu_bogdanIonescu Bogdan-Gabriel ionescu_bogdan Data 6 martie 2007 22:20:43
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define nmax 4112
#define mmax 65536

int n,m,i,j,k,sol;
int a[mmax],b[mmax];
char adj[nmax][nmax/8];
int x;
int nr[256];

int main()
{
    freopen("triplete.in","r",stdin);
    freopen("triplete.out","w",stdout);

    scanf("%d%d",&n,&m);
    for (i=0;i<m;i++)
    {
        scanf("%d%d",a+i,b+i);
        --a[i],--b[i];
        adj[a[i]][b[i]/8]|=1<<b[i]%8;
        adj[b[i]][a[i]/8]|=1<<a[i]%8;
    }
    memset(nr,0,sizeof(nr));
    for (i=0;i<m;i++)
    {
        for (j=0;j<=n/8+1;j++)
        {
            x=0;
            x=(adj[a[i]][j]&adj[b[i]][j]);
            ++nr[x%256];
        }
    }
    for (x=0;x<256;x++)
    {
        if (x&1) sol+=nr[x];
        if (x&2) sol+=nr[x];
        if (x&4) sol+=nr[x];
        if (x&8) sol+=nr[x];
        if (x&16) sol+=nr[x];
        if (x&32) sol+=nr[x];
        if (x&64) sol+=nr[x];
        if (x&128) sol+=nr[x];
    }
    printf("%d\n",sol/3);
    
    return 0;
}