Cod sursa(job #1304281)

Utilizator robertstrecheStreche Robert robertstreche Data 28 decembrie 2014 20:17:08
Problema Distante Scor 40
Compilator cpp Status done
Runda tema_vacanta_iarna Marime 0.85 kb
#include <fstream>

#define lmax 50005

using namespace std;

ifstream f("distante.in");
ofstream g("distante.out");

int t,n,m,s,x,y,z;
int dist[lmax],distm[lmax];

inline void solve()
{
    bool ok=1;

    f>>n>>m>>s;

    for (int i=1;i<=n;i++)
      {
          f>>dist[i];
          distm[i]=10000000;
      }

    distm[s]=0;

    if (dist[s])
     {
         g<<"NU\n";
         return;
     }

    for (int i=1;i<=m;i++)
     {
         f>>x>>y>>z;

         if (dist[y]+z<distm[x])
          distm[x]=dist[y]+z;

         if (dist[x]+z<distm[y])
          distm[y]=dist[x]+z;
     }
   for (int i=1;i<=n;i++)
     if (dist[i]!=distm[i])
      {
          g<<"NU\n";
          return;
      }

    g<<"DA\n";
}

int main()
{
   f>>t;

   for (int i=1;i<=t;i++)
     solve();

  f.close();
  g.close();
}