Cod sursa(job #3168450)

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

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

const int Nmax = 50001, INF = 9999999;

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

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

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

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

    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++)
        viz[i] = 0;


    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\n";
        else
            cout << "NU\n";
    }
}