Nu aveti permisiuni pentru a descarca fisierul grader_test12.ok
Cod sursa(job #1442195)
| Utilizator | Data | 24 mai 2015 16:49:58 | |
|---|---|---|---|
| Problema | Triplete | Scor | 90 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.92 kb |
#include <cstdio>
#include <cstring>
#include <algorithm>
#define Nmax 4099
#define Mmax 65539
#define B 30
using namespace std;
int n, m, i, j, 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);
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;
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("%d", sol / 3);
return 0;
}
