Pagini recente » Cod sursa (job #27894) | Cod sursa (job #313537) | Cod sursa (job #944260) | Cod sursa (job #2653383) | Cod sursa (job #12007)
Cod sursa(job #12007)
#include<stdio.h>
#define dim 1<<12+1
#define bit 16
#define DIM 1<<8+1
#define Max 1<<16+1
int N, A[dim][DIM], x[Max], y[Max]; long M, Sol;
void read();
void solve();
void write();
int main()
{
read();
solve();
write();
return 0;
}
void read()
{
freopen("triplete.in", "r", stdin);
scanf("%d %ld", &N, &M);
long i; int a, b, pos, mask;
for(i=1; i<=M; ++i)
{
scanf("%d %d", &a, &b);
//adaug in lista lui a pe b
pos = b / bit;
mask = 1<<(b%bit);
A[a][pos] |= mask;
//adaug in lista lui b pe a
pos = a / bit;
mask = 1<<(a%bit);
A[b][pos] |= mask;
x[i] = a; y[i] = b;
}
fclose(stdin);
}
void solve()
{
long i; int j, mask, a, b, k, maska, maskb, byte;
for(i=1; i<=M; ++i)
{
a = x[i]; b = y[i];
for(j=0; j<=N/bit; ++j)
{
mask = A[a][j] & A[b][j];
maska = A[a][j];
maskb = A[b][j];
for(k=0, byte=0; mask; mask>>=1, ++byte)
if(mask&1)
{
++ k;
//elimin muchia de la a la nodul comun
maska ^= 1<<byte;
//elimin muchia de la b la nodul comun
maskb ^= 1<<byte;
//elimin muchiile catre a si b de la nodul comun
A[byte][a/bit] ^= 1<<(a%bit);
A[byte][b/bit] ^= 1<<(b%bit);
}
Sol += k;
//actualizez listele de adiacenta ale lui a si b
A[a][j] = maska;
A[b][j] = maskb;
}
}
}
void write()
{
freopen("triplete.out", "w", stdout);
printf("%ld", Sol);
fclose(stdout);
}