Cod sursa(job #3341135)

Utilizator ioanabaduIoana Badu ioanabadu Data 18 februarie 2026 10:30:16
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>
#include <climits>
#define NMAX 10


using namespace std;

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

vector <pair<int, int>> graph[NMAX];
priority_queue <pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;

vector <int> dijkstra (int source, int nodes, int edges){
    vector <int> dist (nodes+1, INT_MAX);
    int node, cost;

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

    while (!pq.empty()){
        node = pq.top().second;
        cost = pq.top().first;
        pq.pop();

        if (dist[node] < cost)
            continue;

        for (auto idx:graph[node]){
            if (dist[idx.first] > dist[node] + idx.second){
                dist[idx.first] = dist[node] + idx.second;
                pq.push({dist[idx.first], idx.first});
            }
        }
    }

    return dist;
}

int main (){
    int test, nodes, edges, source, x, y, cost;

    in >> test;
    while(test--){
        in >> nodes >> edges >> source;
        vector <int> distInit (nodes+1, INT_MAX);

        for (int i=1; i<=nodes; ++i){
            in >> distInit[i];
            graph[i].clear();
        }

        for (int i=1; i<=edges; ++i){
            in >> x >> y >> cost;

            graph[x].push_back({y, cost});
            graph[y].push_back({x, cost});
        }

        vector <int> distFinal = dijkstra (source, nodes, edges);

        if (distInit == distFinal)
            out << "DA" << '\n';
        else out << "NU" << '\n';
    }

    return 0;
}