Cod sursa(job #608266)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 15 august 2011 23:03:25
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#include<vector.h>
#define pb push_back
#define N 50001
int c,t;
long i,k,n,m,s,l,j,d[N],f[N];
vector<long> g[N],e[N];
int main()
{freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
while(t--)
      {scanf("%ld%ld%ld",&n,&m,&s);
      for(i=1;i<=n;i++)
             scanf("%ld",&d[i]),f[i]=d[i];
      while(m--)
             {scanf("%ld%ld%d",&i,&j,&c);
             g[i].pb(j);
             g[j].pb(i);
             e[i].pb(c);
             e[j].pb(c);}
      for(i=1;i<=n;i++)
      if(i!=s)
             for(j=0;j<g[i].size();j++)
             if(f[i]>e[i][j]+f[g[i][j]])
                     f[i]=e[i][j]+f[g[i][j]];
      if(!d[s])
             k=1;
      else
             k=0;
      for(j=1;j<=n;j++)
      if(j!=s&&f[j]==d[j])
             k++;
      if(k==n)
             printf("DA\n");
      else
             printf("NU\n");}
return 0;}