Pagini recente » Cod sursa (job #2236879) | Cod sursa (job #2058725) | Cod sursa (job #76445) | Cod sursa (job #2387769) | Cod sursa (job #341724)
Cod sursa(job #341724)
#include<cstdio>
#include<vector>
using namespace std;
const int N = (1<<12);
int n;
unsigned char a[N][N>>3];
vector<int> adj[N];
void citire()
{
int m,x,y;
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d",&x,&y);
--x;
--y;
a[x][y>>3] |= 1<<(y&7);
a[y][x>>3] |= 1<<(x&7);
adj[x].push_back(y);
}
}
/*
unsigned int biti1(unsigned char x)
{
unsigned int nr=0;
while(x)
{
++nr;
x &= x-1;
}
return nr;
}
*/
unsigned int calcul()
{
int i,j,k,m,nb=1+(n>>3),x;
unsigned int nr=0;
for(i=0;i!=n;++i)
for(j=0,m=adj[i].size();j!=m;++j)
for(k=0;k!=nb;++k)
{
//nr+=biti1(a[i][k]&a[adj[i][j]][k]);
x=a[i][k]&a[adj[i][j]][k];
while(x)
{
++nr;
x &= x-1;
}
}
return nr/3;
}
int main()
{
freopen("triplete.in","r",stdin);
freopen("triplete.out","w",stdout);
citire();
printf("%u\n",calcul());
return 0;
}