Cod sursa(job #14499)

Utilizator TabaraTabara Mihai Tabara Data 9 februarie 2007 10:38:12
Problema Triplete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
using namespace std;

#define in "triplete.in"
#define out "triplete.out"
#define NMAX 4096
#define MMAX 65540

struct muchie {
       int x;
       int y;
} mu[MMAX];

typedef struct nod {
        int vf;
        nod*next;
} *PNOD, NOD;

PNOD L[NMAX];
int n,nod1,nod2;
typedef long int INT;
INT m, nrsol,prov;

FILE *fout = fopen( out, "w" );
void Add(int,int);

int main()
{
    FILE *fin = fopen ( in, "r" );
    
    INT i;
    int x,y;
    fscanf( fin, "%d%ld", &n, &m );
    
    for ( i = 1; i <= m; ++i )
    {
        fscanf( fin, "%d%d", &x, &y);
        mu[i].x = x;
        mu[i].y = y;
        Add(x,y);
        Add(y,x);
    }
    
    //rezolvare
    for ( i = 1; i <= m; ++i )
    {
        nod1 = mu[i].x;
        nod2 = mu[i].y;
        prov = 0;
        for ( PNOD p = L[nod1]; p; p = p->next )
        {
            for ( PNOD q = L[nod2]; q; q = q->next )
            {
                if ( p->vf == q->vf ) 
                {
                     prov++;
                     //fprintf(fout, "%d %d %d\n", nod1, nod2, p->vf );
                }
            }
        }
        nrsol += prov;
    }
    
    fprintf(fout, "%ld\n", nrsol / 3);
    
    fclose ( fin );
    fclose ( fout );
    
    return 0;
}
        
void Add( int i, int j )
{
     PNOD p = new NOD;
     p->vf = j;
     p->next = L[i];
     L[i] = p;
}