Cod sursa(job #648421)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 13 decembrie 2011 14:31:20
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
#define N 50001
typedef struct nod
{int x,y;
nod *u;}Nod;
int i,k,c,n,m,s,t,l,d[N],f[N];
Nod *g[N],*p;

void D(Nod *&q,long a,long b)
{Nod *p=new Nod;
p->x=a,p->y=b,p->u=q,q=p;}

int main()
{FILE *h=fopen("distante.in","r"),*z=fopen("distante.out","w");
fscanf(h,"%d",&t);
while(t--)
      {fscanf(h,"%d%d%d",&n,&m,&s);
      for(i=1;i<=n;i++)
             fscanf(h,"%d",&d[i]),f[i]=0;
      while(m--)
             fscanf(h,"%d%d%d",&i,&k,&c),D(g[i],k,c),D(g[k],i,c);
      l=0;
      if(!d[s])
             f[s]=1;
      for(i=1;i<=n;i++)
      for(p=g[i];p;p=p->u)
      if(p->x!=s&&d[p->x]==p->y+d[i])
             f[p->x]=1;
      for(i=1;i<=n;i++)
      if(!f[i])
             l=1;
      if(!l)
             fprintf(z,"DA\n");
      else
             fprintf(z,"NU\n");}
return 0;}