Cod sursa(job #1958193)

Utilizator SirbuSirbu Ioan Sirbu Data 8 aprilie 2017 08:27:47
Problema Triplete Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>

using namespace std;
ifstream fin ("triplete.in");
ofstream fout ("triplete.out");

unsigned int v[4140][140];
pair <int, int> a[4140];

int main (){

  int n, m;
  fin >> n >> m;
  int bucket = (n-1)/31;

  for (int i = 1; i <= m; ++i){
    fin >> a[i].first;
    a[i].first--;
    fin >> a[i].second;
    a[i].second--;

    v[a[i].first][a[i].second / 31] = v[a[i].first][a[i].second / 31] | (1LL << (a[i].second % 31));
    v[a[i].second][a[i].first / 31] = v[a[i].second][a[i].first / 31] | (1LL << (a[i].first % 31));
  }

  long long sol = 0;

  for (int i = 1; i <= m; ++i){
    for (int j = 0; j <= bucket; ++j){
      int nr = (v[a[i].first][j] & v[a[i].second][j]);
      while (nr != 0){
        sol++;
        nr = nr & (nr-1);
      }
    }
  }
  fout << sol/3;

  return 0;
}