Cod sursa(job #3168465)

Utilizator xxUnrealUxxNiculae Adrian-Ioan xxUnrealUxx Data 12 noiembrie 2023 15:21:37
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ifstream cin("distante.in");
ofstream cout("distante.out");

const int Nmax = 50001, INF = 999999999;

vector<pair<int, int>> mat[Nmax];
queue<int> q;
int n, m, st;

int v[Nmax];
int viz[Nmax];
int vmin[Nmax];

int Dijkstra(int x)
{
    for(int i = 1; i<=n; i++)
        v[i] = INF;

    v[x] = 0;
    q.push(x);


    while(!q.empty())
    {
        int c = q.front();
        q.pop();
        for(auto it : mat[c])
        {
            if(v[it.first] > v[c] + it.second)
            {
                v[it.first] = v[c] + it.second;
                q.push(it.first);
            }
        }
    }

    for(int i = 1; i<=n; i++)
    {
        if(v[i] != vmin[i])
        {
            return 0;
        }
    }

    return 1;
}

int main()
{
    int T;
    cin >> T;

    for(int i = 0; i<T; i++)
    {
        cin >> n >> m >> st;
        for(int j = 1; j<=n; j++)
            cin >> vmin[j];

        for(int j = 1; j<=m; j++)
        {
            int a, b, c;
            cin >> a >> b >> c;
            mat[a].push_back({b, c});
            mat[b].push_back({a, c});
        }

        if(Dijkstra(st) == 1)
            cout << "DA";
        else
            cout << "NU";

        if(i != T-1)
            cout << '\n';
    }
}