Cod sursa(job #2133451)

Utilizator amarghescuAnton Marghescu amarghescu Data 16 februarie 2018 23:18:07
Problema Triplete Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.67 kb
#include<cstdio>
#include<bitset>
using namespace std;
bitset<4100>v[4100];
long long g[4100][70];
int count(long long nr){
int cnt=0;
while(nr){
cnt++;
nr=nr&(nr-1);}
return cnt;}
int main(){
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
int n,m,i,x,y,e,rasp=0,j,u;
long long nr;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d%d",&x,&y),v[x][y]=1,v[y][x]=1;
for(i=1;i<=n;i++)
for(u=0,j=1;j<=n;j=j+60){
nr=0;
for(e=j;e<j+60 && e<=n;e++)
nr=nr*2+v[i][e];
g[i][++u]=nr;}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if (i!=j && v[i][j]==1){
for(e=1;e<=u;e++){
nr=g[i][e]&g[j][e];
rasp=rasp+count(nr);}}
printf("%d\n",rasp/6);
return 0;}