Cod sursa(job #48973)

Utilizator wazupPricop Mircea wazup Data 5 aprilie 2007 11:03:06
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#define NM 4097
FILE *fin,*fout;
struct nod { short val;
	     nod *urm; };
nod *l[NM],*p,*nw,*q;

short i,n,m,x,y;
long long nr;
int main()
{
fin=fopen("triplete.in","rt");
fout=fopen("triplete.out","wt");
fscanf(fin,"%hd %hd",&n,&m);
for (i=1;i<=m;i++)
  { fscanf(fin,"%hd %hd",&x,&y);
    p=l[x];
    nw = new nod;
    nw->val=y;
    if (p->val>=nw->val||p==NULL)
	{ l[x]=nw;
	  nw->urm=p;
	  }
    else
    {
    while (p->urm!=NULL&&p->urm->val<y)
       p=p->urm;
    nw->urm=p->urm;
    p->urm=nw;
    }
    p=l[y];
    nw = new nod;
    nw->val=x;
    if (p->val>=nw->val||p==NULL)
	{ l[y]=nw;
	  nw->urm=p;
	  }
    else
    {
    while (p->urm!=NULL&&p->urm->val<x)
       p=p->urm;
    nw->urm=p->urm;
    p->urm=nw;
    }
  }

rewind(fin);
fscanf(fin,"%hd %hd",&n,&m);
for (i=1;i<=m;i++)
  { fscanf(fin,"%hd %hd",&x,&y);
    p=l[x];
    q=l[y];
    while (q->urm!=NULL&&p->urm!=NULL)
      { if (q->val==p->val)
	   nr++;
	p=p->urm;
	q=q->urm;
      }
    if (q->val==p->val)
	   nr++;
  }
fprintf(fout,"%lld\n",nr/3);
return 0;
}