Pagini recente » Cod sursa (job #2314102) | Cod sursa (job #403131) | Cod sursa (job #54636) | Cod sursa (job #3226559) | Cod sursa (job #80590)
Cod sursa(job #80590)
using namespace std;
#include <cstdio>
#include <vector>
#define maxn 4096
#define pb push_back
int n;
vector<int> a[maxn+5];
unsigned int x[maxn+5][(maxn/32)+5];
int nrbiti[(1<<16)+5];
void init_biti()
{
int i, j;
for(i=0;i<=(1<<16);++i)
{
j=i;
while(j)
{
if(j&1) ++nrbiti[i];
j>>=1;
}
}
}
void read()
{
freopen("triplete.in","r",stdin);
int m, p,q;
scanf("%d %d\n", &n, &m);
while(m--)
{
scanf("%d %d\n", &p,&q);
a[p].pb(q);
//a[q].pb(p);
x[p][q>>5]|=1<<(q&31);
x[q][p>>5]|=1<<(p&31);
}
}
void solve()
{
int i, j, n32=n/32;
vector<int>::iterator it;
unsigned int ax[(maxn/32)+5];
int nr=0;
for(i=1;i<=n;++i)
for(it=a[i].begin();it!=a[i].end();++it)
{
for(j=0;j<=n32;++j) ax[j]=x[i][j]&x[*it][j];
for(j=0;j<=n32;++j) nr+=nrbiti[ax[j]%(1<<16)]+nrbiti[ax[j]>>16];
// printf("%d %d\n", i, *it);
//for(j=1;j<=n;++j) if(ax[j>>5]&(1<<(j&31)))printf("1 ");else printf("0 ");
//printf("\n");
}
printf("%d\n", nr/3);
}
int main()
{
freopen("triplete.out","w",stdout);
init_biti();
read();
int i,j;
/*
for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j) if(x[i][j>>5]&(1<<(j&31)))printf("1 ");else printf("0 ");
printf("\n");
}
*/
solve();
return 0;
}