Cod sursa(job #3355095)

Utilizator Ana-Maria10Tomoiala Ana-Maria Ana-Maria10 Data 21 mai 2026 18:59:58
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <bits/stdc++.h>

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

int main() {

    int t, n, m, s;
    fin>>t;
    for (int i = 0; i < t; i++) {
        fin>>n>>m>>s;
        vector<int>ans(n + 1, 0);
        for (int j = 0; j < n; j++) {
            fin>>ans[j];
        }
        vector<vector<pair<int, int>>>adj(n + 1);
        for (int j = 0; j < m; j++) {
            int x, y, c;
            fin>>x>>y>>c;
            adj[x].push_back({y, c});
            adj[y].push_back({x, c});
        }
        priority_queue<
            pair<int, int>,
            vector<pair<int, int>>,
            greater<pair<int, int>>
        >pq;
        pq.push({0, s});
        vector<int>dist(n + 1, 1e9);
        dist[0] = 0;
        while(!pq.empty()) {
            auto [cost, node] = pq.top();
            pq.pop();
            for (pair<int, int> vecin : adj[node]) {
                int v = vecin.first;
                int c = vecin.second;
                if (dist[v] > cost + c) {
                    dist[v] = cost + c;
                    pq.push({dist[v], v});
                }
            }
        }
        int ok = 0;
        for (int i = 1; i <= n; i++) {
            if (dist[i] == ans[i]) {
                ok = 1;
                break;
            }
        }
        if (ok == 0) {
            fout<<"DA\n";
        } else {
            fout<<"NU\n";
        }
    }
    return 0;
}