Cod sursa(job #1718264)

Utilizator Matei_IgnutaMatei Ignuta Matei_Ignuta Data 17 iunie 2016 10:13:31
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>

struct cell {
    unsigned int u, v;
};

unsigned int n, m;
cell edge[65537];
unsigned int V[4097][4097 >> 5];

void define(unsigned int u, unsigned int v)
{
    V[u][v >> 5] |= (1 << (v & 31));
}

int count(unsigned int u)
{
    unsigned int count = 0;
    while (u)
    {unsigned int sum = 0, groups = (n >> 5);
        u &= u - 1;
        count++;
    }
  return count;
}

int main(void)
{
    unsigned int sum = 0, groups = (n >> 5);
    freopen("triplete.in", "r", stdin);
    freopen("triplete.out", "w", stdout);
    scanf("%d %d", &n, &m);
    for (unsigned int i = 1; i <= m; i++)
    {
        scanf("%d %d", &edge[i].u, &edge[i].v);
        if (edge[i].u > edge[i].v) {
            unsigned int tmp = edge[i].u;
            edge[i].u = edge[i].v;
            edge[i].v = tmp;
        }
    define(edge[i].u, edge[i].v);
    }
    for (unsigned int i = 1; i <= m; i++)
        for (unsigned int j = 0; j <= groups; j++)
            sum += count(V[edge[i].u][j] & V[edge[i].v][j]);
  printf("%d\n", sum);
  return 0;
}