Cod sursa(job #3354650)

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

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

    int t;
    f >> t;

    const long long INF = (long long)1e18;

    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<tuple<int, int, int>> edges;

        for (int i = 0; i < m; i++) {
            int x, y, cost;
            f >> x >> y >> cost;

            edges.push_back({x, y, cost});
            edges.push_back({y, x, cost});
        }

        vector<long long> dist(n + 1, INF);
        dist[src] = 0;

        for (int i = 1; i <= n - 1; i++) {
            for (auto &e : edges) {
                int u, v, cost;
                tie(u, v, cost) = e;

                if (dist[u] != INF && dist[u] + cost < dist[v]) {
                    dist[v] = dist[u] + cost;
                }
            }
        }

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

        if (!ok) g << "NU\n";
        else g << "DA\n";
    }

    return 0;
}