Pagini recente » Monitorul de evaluare | Cod sursa (job #2750140) | Istoria paginii utilizator/cocothecoconut42 | Diferente pentru utilizator/catalincraciun intre reviziile 2 si 12 | Cod sursa (job #1472092)
#include <cstdio>
#include <vector>
#include <bitset>
#include <algorithm>
#define F first
#define S second
using namespace std;
const int Nmax = (1 << 12);
const int bits = 31;
int n , m , ans;
vector < pair < int , int > > q;
int g[Nmax][Nmax/bits];
int conjunctie(int a , int b)
{
int ret = 0;
for (int i = 0; i <= n / bits; ++i)
{
int x = (g[a][i] & g[b][i]);
while (x)
{
++ret;
x &= (x - 1);
}
}
return ret;
}
int main()
{
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
scanf("%d %d", &n, &m);
q = vector < pair < int , int > > (m);
for (auto &it : q)
{
scanf("%d %d", &it.F, &it.S);
if (it.F > it.S) swap(it.F , it.S);
it.F--; it.S--;
g[it.F][it.S/bits] |= (1 << (it.S % bits));
}
for (auto &it : q)
ans += conjunctie(it.F , it.S);
printf("%d\n", ans);
return 0;
}