Cod sursa(job #2354366)

Utilizator alexilasiAlex Ilasi alexilasi Data 25 februarie 2019 11:33:49
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <bits/stdc++.h>

#define pii pair <int, int>
#define mp make_pair
#define f first
#define s second

using namespace std;

ifstream fin ("distante.in");
ofstream fout ("distante.out");

const int nMax = 50000;

int t, n, m, s, i, a, b, c;
int d[nMax + 10], q[nMax + 10];
vector <pii> v[nMax + 10];
priority_queue < pii, vector <pii>, greater <pii> > pq;

int main()
{
    fin >> t;
    while(t--)
    {
        fin >> n >> m >> s;
        for(i=1; i<=n; i++)
            fin >> q[i];
        for(i=1; i<=m; i++)
        {
            fin >> a >> b >> c;
            v[a].push_back(mp(b,c));
            v[b].push_back(mp(a,c));
        }

        pq.push(mp(1, s));

        while(!pq.empty())
        {
            pii nod = pq.top(); pq.pop();
            if(d[nod.s]) continue;
            d[nod.s] = nod.f;
            for(auto it : v[nod.s])
                if(!d[it.f]) pq.push(mp(nod.f + it.s, it.f));
        }

        for(i=1; i<=n; i++)
            if(q[i]+1 != d[i]) break;

        if(i == n+1) fout << "DA\n";
        else fout << "NU\n";

        for(i=1; i<=n; i++)
        {
            v[i].clear();
            d[i] = 0;
        }

    }
    return 0;
}