Cod sursa(job #1304239)

Utilizator robertstrecheStreche Robert robertstreche Data 28 decembrie 2014 19:38:41
Problema Distante Scor 50
Compilator cpp Status done
Runda tema_vacanta_iarna Marime 1.19 kb
#include <fstream>
#include <queue>
#include <vector>

#define lmax 50005
#define inf 5000000
#define pb push_back
#define mp make_pair

using namespace std;

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

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

queue <int>q;

inline void solve()
{
    vector <pair<int,int> >v[lmax];
    vector <pair<int,int> >::iterator it;


    f>>n>>m>>s;

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

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

         v[x].pb(mp(y,z));
         v[y].pb(mp(x,z));
     }

    for (int i=1;i<=n;i++)
     {
         int val=inf;

         for (it=v[i].begin();it!=v[i].end();it++)
           if (dist[(*it).first]+(*it).second<val)
            {
                val=dist[(*it).first]+(*it).second;

                if (val<dist[i])
                 {
                    g<<"NU\n";
                    return;
                 }
            }
         if (dist[i]!=val && i!=s)
         {
            g<<"NU\n";
            return;
         }
     }
    g<<"DA\n";
}

int main()
{
   f>>t;

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

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