Cod sursa(job #3355256)

Utilizator actonceaAndreea Catalina actoncea Data 22 mai 2026 11:31:57
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f ("distante.in");
ofstream g ("distante.out");


int main() {
    int n, m, start, t;
    f >> t;
    for (int i = 0; i < t; i++) {
        f >> n >> m >> start;
        vector<int> ex(n+1);
        for (int j = 1; j <= n; j++) {
            int a;
            f >> a;
            ex[j] = a;
        }

        vector<vector<pair<int, int>>> adj(m+1);
        vector<int> dist(n+1, 400000001);
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
        for (int j = 0; j < m; j++) {
            int a, b, c;
            f >> a >> b >> c;
            adj[a].push_back({c, b});
        }

        q.push({0, start});
        dist[start] = 0;

        while (!q.empty()) {
            int val = q.top().first;
            int nod = q.top().second;
            q.pop();

            for (auto x : adj[nod]) {
                int weight = x.first;
                int number_node = x.second;

                if (dist[number_node] > dist[nod] + weight) {
                    dist[number_node] = dist[nod] + weight;
                    q.push({dist[number_node], number_node});

                }
            }

        }

        int ok = 0;
        for (int j = 1; j <= n; j++) {
           if (dist[j] != ex[j]) {
                ok = 1;
                break;
            } 

        }
        if (ok == 0)
            g << "DA" <<'\n';
        else
            g << "NU" << '\n';

        
    
    }
    

    return 0;
}