Cod sursa(job #1459293)

Utilizator felixiPuscasu Felix felixi Data 9 iulie 2015 15:30:52
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
///  Cod cules si modificat

#include <cstdio>
#include <cstring>
#include <algorithm>
#define Nmax 4100
#define Mmax 66000
#define B 32
using namespace std;
int n, m, i, j;
int a[Nmax][Nmax / B];
int 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);
         if (v[i].x > v[i].y)
         swap(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(int n)
{
    int nb = 0;
    while (n)
    {
        ++ nb;
        n &= (n - 1);
    }

    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("%d", sol );
    return  0;
}