Cod sursa(job #3354652)

Utilizator mihaelajipaMihaela Jipa mihaelajipa Data 19 mai 2026 17:22:53
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;

int main() {
    ifstream f("distante.in");
    ofstream g("distante.out");

    int t;
    f >> t;

    while (t--) {
        int n, m, src;
        f >> n >> m >> src;

        vector<long long> initial(n + 1);
        for (int i = 1; i <= n; i++) f >> initial[i];

        vector<vector<pair<int,int>>> adj(n + 1);

        for (int i = 0; i < m; i++) {
            int x, y, c;
            f >> x >> y >> c;
            adj[x].push_back({y, c});
            adj[y].push_back({x, c});
        }

        const long long INF = 1e18;
        vector<long long> dist(n + 1, INF);

        priority_queue<pair<long long,int>,
                       vector<pair<long long,int>>,
                       greater<pair<long long,int>>> pq;

        dist[src] = 0;
        pq.push({0, src});

        while (!pq.empty()) {
            auto [d, u] = pq.top();
            pq.pop();

            if (d != dist[u]) continue;

            for (auto [v, c] : adj[u]) {
                if (dist[u] + c < dist[v]) {
                    dist[v] = dist[u] + c;
                    pq.push({dist[v], v});
                }
            }
        }

        bool ok = true;
        for (int i = 1; i <= n; i++) {
            if (dist[i] != initial[i]) {
                ok = false;
                break;
            }
        }

        g << (ok ? "DA\n" : "NU\n");
    }

    return 0;
}