Pagini recente » Cod sursa (job #2757068) | Diferente pentru autumn-warmup-2007/solutii/runda-3 intre reviziile 42 si 43 | Cod sursa (job #2003232) | Istoria paginii utilizator/mateilazarescu | Cod sursa (job #71383)
Cod sursa(job #71383)
using namespace std;
#include <cstdio>
#include <cassert>
#include <cstring>
#include <vector>
#include <algorithm>
#define FIN "triplete.in"
#define FOUT "triplete.out"
#define NMAX 4097
#define B 17
#define pb push_back
int NrBit1[(1<<B)];
int N, M, C[NMAX][(NMAX)/B+1];
void preproc ()
{
int NrConf = (1<<B);
for (int i = 0; i < NrConf; ++ i)
for (int j = 0; j <= B; ++ j)
if (i & (1 << j))
++ NrBit1[i];
}
void read ()
{
scanf ("%d %d\n", &N, &M);
int x, y;
for (int i = 1; i <= M; ++ i)
{
scanf ("%d %d\n", &x, &y);
-- x;
-- y;
C[x][y/B] += (1 << (y % B));
C[y][x/B] += (1 << (x % B));
}
}
void solve ()
{
int sol = 0;
fseek (stdin, 0, SEEK_SET);
scanf ("%d %d\n", &N, &M);
int x, y;
for (int pas = 1; pas <= M; ++ pas)
{
scanf ("%d %d\n", &x, &y);
-- x;
-- y;
if (y < x)
swap (x, y);
int i;
for (i = y + 1; (i % B); ++ i)
if (C[x][i/B] & (1 << (i % B)))
if (C[y][i/B] & (1 << (i % B)))
++ sol;
int sz = (N-1) / B;
for (int j = i / B; j <= sz; ++ j)
sol += NrBit1[C[x][j] & C[y][j]];
}
printf ("%d\n", sol);
}
int
main ()
{
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
preproc ();
read ();
solve ();
return 0;
}