Cod sursa(job #3128322)

Utilizator RyyyIsmana Robert Ryyy Data 9 mai 2023 11:43:57
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

#define INF (1 << 30)

priority_queue <pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;


int main(){
    int T;

    in >> T;

    for(int i = 0; i < T; i++){
        int N, M, S;
        in >> N >> M >> S;

        vector<int> initial_dist(N, -1);

        for (int j = 0; j < N; j++)
            in >> initial_dist[j];

        vector<pair<int, int> > adj[M];
        for (int j = 0; j < M; j++){
            int x, y, w;
            in >> x >> y >> w;
            adj[x].push_back({y, w});
        }              
        // Dijkstra and check if initial_dists are correct

        vector<int> d(N + 1);
        vector<int> p(N + 1);
        

        d[S] = 0;
        p[S] = -1;

        while (!q.empty())
            q.pop();


        for (int i = 1; i <= N; i++) {
            if (i != S) {
                d[i] = INF;
                p[i] = -1;
            }
            q.push({d[i], i});
        }


        while (!q.empty()){
            int u = q.top().second;
            q.pop();

            for (auto& it : adj[u]) {
                int v = it.first;
                int w = it.second;

                if (d[v] > d[u] + w) {
                    d[v] = d[u] + w;
                    p[v] = u;
                    q.push({d[v], v});
                }
            }
        }

        for (int i = 1; i <= N; i++) {
            if (d[i] == INF) {
                d[i] = -1;
            }
        }

        bool ok = true;
        for (int i = 0; i < N; i++){
            if (initial_dist[i] != d[i + 1]){
                ok = false;
                break;
            }
        }

        if (ok)
            out << "DA\n";
        else
            out << "NU\n";

    }
    

}