Pagini recente » Cod sursa (job #2823008) | Cod sursa (job #1104818) | Cod sursa (job #722562) | Rating Andrei Marcel (SHOBU007) | Cod sursa (job #8312)
Cod sursa(job #8312)
#include <stdio.h>
#include <vector>
#define MaxN 4096
#define pow(x) (1<<(x))
using namespace std;
unsigned n, m, sum[MaxN];
unsigned a[MaxN][MaxN/32];
vector <unsigned> V[MaxN];
unsigned vec[16*MaxN], v1[16*MaxN], v2[16*MaxN], st[2*MaxN];
inline int IsSet(unsigned x, unsigned y)
{
return (a[x][y/32] & pow(y&31));
}
int main()
{
freopen("triplete.in", "r", stdin);
freopen("triplete.out", "w", stdout);
unsigned i,j,k;
scanf("%d %d", &n, &m);
for (k=0; k<m; k++){
scanf("%d %d", &i, &j);
i--; j--;
if (i<j) V[i].push_back(j), a[i][j/32]|=pow(j&31);
else V[j].push_back(i), a[j][i/32]|=pow(i&31);
}
for (i=0; i<n; i++){
st[i+1]=st[i]+V[i].size();
for (j=0; j<V[i].size(); j++)
vec[st[i]+j]=V[i][j],
v1[st[i]+j]=V[i][j]/32,
v2[st[i]+j]=pow(V[i][j]&31);
}
int sol=0;
for (i=0; i<n; i++)
for (j=st[i]; j<st[i+1]; j++){
int v=vec[j];
for (k=st[v]; k<st[v+1]; k++)
if (a[i][v1[k]] & v2[k]) sol++;
}
printf("%d\n", sol);
return 0;
}