Cod sursa(job #1442189)

Utilizator akaprosAna Kapros akapros Data 24 mai 2015 16:40:07
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define Nmax 4099
#define Mmax 65539
#define B 62
using namespace std;
unsigned long long a[Nmax][Nmax / B];
int i, j, n, m;
unsigned long long sol;
struct nod
{
    int x;
    int y;
}   v[Mmax];
void citire()
{
    scanf("%d %d", &n, &m);
    for (i = 1; i <= m ; ++ i)
    {
         scanf("%d %d", &v[i].x, &v[i].y);
         a[v[i].x][v[i].y / B] += (1 << (v[i].y % B)) ;
         a[v[i].y][v[i].x / B] += (1 << (v[i].x % B)) ;
    }
}
inline int nb1(unsigned long long  n)
{
    int nb = 0;
    if (n == 0) return 0;
    do
    {
        n &= n - 1;
        ++ nb;
    } while (n);

    return nb;
}
int main()
{
    freopen("triplete.in", "r", stdin);
    freopen("triplete.out", "w", stdout);
    citire();
    for (i = 1; i <= m ; ++ i)
    {
        for (j = 0; j <= n / B; ++ j)
        sol += nb1(a[v[i].x][j] & a[v[i].y][j]);
    }
    printf("%lld", sol / 3);
    return  0;
}