Cod sursa(job #2830191)

Utilizator robertanechita1Roberta Nechita robertanechita1 Data 9 ianuarie 2022 17:02:18
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <bits/stdc++.h>

using namespace std;

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

///vector <pair <int, int >>h[50005];
int T, n, m, s, d[50005], dist[50005];

/**void Djs(int start)
{
    for(int i = 1; i <= n; i++)
        viz[i] = 0;
    for(int i = 1; i <= n; i++)
        dist[i] = 2e9;
    priority_queue<pair<int, int> >q;
    q.push({0, start});
    dist[start] = 0;
    while(!q.empty())
    {
        int nod = q.top().second;
        int cost = q.top().first;
        q.pop();
        if(cost > dist[nod])
            continue;
        for(auto j : h[nod])
            if(cost + j.second < dist[j.first])
            {
                dist[j.first] = cost + j.second;
                q.push({dist[j.first], j.first});
            }
    }
}*/

int main()
{
    int a, b, c;
    fin >> T;
    for(int pas = 1; pas <= T; pas++)
    {
        fin >> n >> m >> s;
        for(int i = 1; i <= n; i++)
            fin >> d[i];
        for(int i = 1; i <= n; i++)
            dist[i] = 2e9;
        dist[s] = 0;
        for(int i = 1; i <= m; i++)
        {
            fin >> a >> b >> c;
            dist[b] = min(dist[a] + c, dist[b]);
            dist[a] = min(dist[b] + c, dist[a]);
        }
        int i = 1;
        for( ; i <= n && d[i] == dist[i]; i++)
            ;
        if(d[i] != dist[i])
            fout << "NU\n";
        else
            fout << "DA\n";

    }
    return 0;
}