Cod sursa(job #27930)

Utilizator AdixSuciu Adrian Adix Data 7 martie 2007 12:14:11
Problema Triplete Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>
long m,n;
long solutie;
long muc[65537][2];
bool mat[3000][3000];

void citire(){
     FILE *in;
     long i,x,y;
     in=fopen("triplete.in","r");
     fscanf(in,"%ld %ld",&n,&m);
     for(i=1;i<=m;i++){
       fscanf(in,"%ld %ld",&x,&y);
       muc[i][0]=x;muc[i][1]=y;
       mat[x][y]=1;mat[y][x]=1;       
                       }
     fclose(in);
     }

void procesare(){
long i,j,k,l;
/*
Pentru o muchie fixata este suficienta iterarea prin lista de adiacenta a 
nodurilor a si b si adunarea la numarul total de solutii a numarului de 
noduri comune. Acest algoritm are complexitatea O(M * N), 
pentru ca parcurgerea unei liste de adiacenta se realizeaza in O(N)
*/
for(i=1;i<=m;i++){
		for(j=1;j<=n;j++){
		if(j==muc[i][0]||j==muc[i][1]) continue;
		k=muc[i][0];
		l=muc[i][1];
            if(mat[k][j]&&mat[l][j]) solutie++;
                          }

                 }
}
void scriere(){
     FILE *out;
     out=fopen("triplete.out","w");
     fprintf(out,"%ld",solutie/3);
     fclose(out);
     }

int main(){
     citire();
    procesare();
     scriere();
     return 0;
     }