Cod sursa(job #2830748)

Utilizator TUdOr73Minciunescu Tudor TUdOr73 Data 10 ianuarie 2022 11:07:34
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>

using namespace std;

const int MAX =  1000000001;
const int NMAX = 50005;
struct edge {
    int node, cost;
    edge(int node, int cost)
    {
        this->node = node;
        this->cost = cost;
    }
};

int main()
{
    int distances[NMAX];
    vector<int> minDistances(NMAX);
    int visited [NMAX];
    ifstream f("distante.in");
    ofstream g("distante.out");
    int T, m,n,s, x, y ,c;
    f >> T;
    while (T > 0 )
    {
        f >> n >> m >> s;
        vector<vector<edge>> edges(NMAX);
        for(int i = 1; i<= n; i++)
        {
            f >> distances[i];
            minDistances[i] = MAX;
            visited[i] = 0;
        }
        for(int i = 0; i< m ; i++)
        {
            f >> x >> y >> c;
            edges[x].push_back(edge(y,c));
            edges[y].push_back(edge(x,c));

        }
        priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
        minDistances[s] = 0;
        pq.push(make_pair(0, s));
        while (!pq.empty())
        {
            int current_node = pq.top().second;
            pq.pop();
            if(!visited[current_node]) {
                visited[current_node] = 1;
                for (auto i: edges[current_node]) {
                    if (minDistances[current_node] + i.cost < minDistances[i.node]) {
                        minDistances[i.node] = minDistances[current_node] + i.cost;
                        pq.push(make_pair(minDistances[i.node], i.node));
                    }
                }
            }
        }
        int ok =1;
        for(int i = 1; i<= n; i++)
        {
            if (minDistances[i] != distances[i]) {
                ok = 0;
                g << "NU"<< "\n";
                break;
            }
        }
        if(ok == 1) {
            g << "DA" << "\n";
        }
        T--;
    }

}