Pagini recente » Cod sursa (job #1012386) | Cod sursa (job #1111707) | Cod sursa (job #1387266) | Cod sursa (job #2139337) | Cod sursa (job #327875)
Cod sursa(job #327875)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define in "triplete.in"
#define out "triplete.out"
#define NMAX 513
#define MASK (0x80)
#define BYTEMAX 257
typedef struct set {
char *f;
} *PSet, Set;
PSet L;
int N, M, nrsol;
int cnt[BYTEMAX];
void Add ( int i, int j )
{
unsigned char a = MASK;
int R, C;
C = (j>>3);
R = j-(C<<3);
a >>= R;
L[i].f[C] |= a;
}
int main ( void )
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
unsigned char a;
int X, Y, i;
char sep[] = " \n";
char buffer[11];
char *p;
scanf ( "%d %d\n", &N, &M );
L = (PSet)calloc ( N+1,sizeof(Set) );
for ( i = 1; i <= N; ++i )
L[i].f = (char*)calloc ( (N>>3), sizeof(char) );
for ( i = 1; i <= BYTEMAX-2; ++i )
cnt[i] = cnt[i>>1] + (i&1);
for ( ; M; --M )
{
fgets ( buffer, 11, stdin );
p = strtok ( buffer, sep );
X = atoi ( p );
p = strtok ( 0, sep );
Y = atoi ( p );
Add ( X, Y );
Add ( Y, X );
}
fseek ( stdin, 0, SEEK_SET );
scanf ( "%d %d\n", &N, &M );
for ( ; M; --M )
{
fgets ( buffer, 11, stdin );
p = strtok ( buffer, sep );
X = atoi ( p );
p = strtok ( 0, sep );
Y = atoi ( p );
for ( i = 0; i <= (N>>3); ++i )
{
a = ((L[X].f[i])&(L[Y].f[i]));
nrsol += cnt[a];
}
}
printf ( "%d\n", (nrsol/3));
for ( i = 1; i <= N; ++i )
free ( L[i].f );
free ( L );
return 0;
}