Cod sursa(job #752274)

Utilizator PetcuIoanPetcu Ioan Vlad PetcuIoan Data 28 mai 2012 11:44:42
Problema Triplete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<stdio.h>
#include<assert.h>
#include<string.h>

#include<vector>
#include<algorithm>
#include<bitset>

using namespace std;

const int knmax = 4100;
bitset<knmax> aux, graph[knmax];
int verts, edges, ver1, ver2;
char t[11];

inline void pars(){
  ver1 = ver2 = 0;
  int i = 0;
  while(t[i] >= '0' && t[i] <= '9'){
    ver1 = ver1 * 10 + t[i] - '0';
    ++i;
  }
  ++i;
  while(t[i] >= '0' && t[i] <= '9'){
    ver2 = ver2 * 10 + t[i] - '0';
    ++i;
  }
}

void read(){
  assert(freopen("triplete.in", "r", stdin));

  scanf("%d%d\n", &verts, &edges);

  for(int i = 1; i <= edges; ++i){
    gets(t);
    pars();
    graph[ver1][ver2] = graph[ver2][ver1] = 1;
  }

}

long long ans;

void solve(){
  for(int i = 1; i <= verts; ++i)
    for(int j = i + 1; j <= verts; ++j)
      if(graph[i][j]){
        aux = graph[i] & graph[j];
        ans = ans + aux.count();
      }
}

void write(){
  assert(freopen("triplete.out", "w", stdout));

  printf("%lld", ans / 3);
}

int main(){
  read();
  solve();
  write();
  return 0;
}