Cod sursa(job #1958139)

Utilizator SirbuSirbu Ioan Sirbu Data 8 aprilie 2017 02:54:49
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>

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

unsigned int v[4100][130];
pair <int, int> a[4100];

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] | (1 << (a[i].second % 31));
    v[a[i].second][a[i].first / 31] = v[a[i].second][a[i].first / 31] | (1 << (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 != 1){
        if (nr%2 == 1)
          sol++;
        nr = nr/2;
      }
      sol++;
    }
  }
  fout << sol/3;

  return 0;
}