Cod sursa(job #2302924)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 15 decembrie 2018 11:38:57
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <bits/stdc++.h>
#define NMAX 50005
#define inf 1e9
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int N , M , G , x , y , cost,c,i,j,nod, S ;
int query;
vector <pair <int,int> > v[NMAX];
priority_queue <pair <int,int> , vector <pair <int,int> >, greater <pair <int,int> > > h;
vector <int> verif;
bool viz[NMAX];
int d[NMAX];
//first= cost
//second= nod
int main()
{
    f >> query ;
    for (int cnt = 1 ; cnt <= query ; ++ cnt)
    {
        f >> N >> M >> S;
        verif.push_back(inf);
          for (i = 1 ; i <= N ; ++i)
          {
              f >> x ;
              verif.push_back(x);
          }
          for (i = 1 ; i <= M ; i ++)
          {
              f >> x >> y >> cost;
              v[x].push_back(make_pair(cost,y));
              v[y].push_back(make_pair(cost,x));
          }
          for (i = 1 ; i <= N; ++ i)
          {
              if (i != S) d[i] = inf;
          }
          d[S] = 0;
          h.push(make_pair(0,S));
          while(!h.empty())
          {
              nod = h.top().second;
              h.pop();
                if (!viz[nod])
              for (i = 0 ; i < v[nod].size() ; ++i)
              {
                  if (d[nod] + v[nod][i].first  < d[v[nod][i].second])
                  {
                      d[v[nod][i].second] = d[nod] + v[nod][i].first;
                      h.push(make_pair(d[v[nod][i].second] , v[nod][i].second));
                  }
              }
              viz[nod] = true;
          }
        bool Adev = true;
        for (i = 1 ; i <= N ; i ++)if (d[i] == inf) d[i] = 0;

        for (i = 1 ; i <= N  && Adev; i ++)
        {
           if (d[i] != verif[i]) Adev = false;

        }

        if (Adev) g<<"DA"<< '\n';
       else g <<"NU" << '\n';
        verif.clear();
        for (i = 1; i <= M ; ++i)
            v[i].clear();


    }


}