Cod sursa(job #2829719)

Utilizator vlad_dimaVlad Dima vlad_dima Data 8 ianuarie 2022 21:48:21
Problema Distante Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <bits/stdc++.h>

using namespace std;

class ComparePair
{
public:
    bool operator() (pair<int,int> a, pair<int,int> b)
    {
        return a.second > b.second;   // compar costurile
    }
};

int main()
{
    ifstream in("distante.in");
    ofstream out("distante.out");
    int T, N, M, S;

    in >> T;

    for (int i = 0; i < T; i++)
    {   
        in >> N >> M >> S;
        vector<int> distFoaie, distMele(N+1);
        vector<vector<pair<int,int>>> lsAdCost(N+1);

        for (int j = 0; j < N; j++)
            {
                int x;
                in >> x;
                distFoaie.push_back(x);
            }

        for (int j = 0; j < M; j++)
        {
            int x, y, c;
            in >> x >> y >> c;
            lsAdCost[x].push_back({y,c});
            lsAdCost[y].push_back({x,c});
        }

        priority_queue<pair<int,int>,vector<pair<int,int>>,ComparePair> heap; //folosesc un priority queue drept heap

        vector<bool> vizitat(N+1);

        heap.push(make_pair(S,0));

        while (!heap.empty())
        {
            pair<int,int> tupluCrt = heap.top(); //in tuplu am nodul si costul catre nod
            heap.pop();

            if (!vizitat[tupluCrt.first])
            {
                vizitat[tupluCrt.first] = true;
                distMele[tupluCrt.first] = tupluCrt.second;

                for (auto vecin : lsAdCost[tupluCrt.first])
                {
                    //pentru fiecare vecin il adaug in heap cu costul curent plus costul arcului
                    heap.push(make_pair(vecin.first,tupluCrt.second + vecin.second));
                }
            }
        }
        bool ok = 1;
        for (int i = 0; i < N; i++)
            if (distFoaie[i] != distMele[i+1])
                ok = 0;
        if (ok)
            out << "DA\n";
        else
            out << "NU\n";
    }

    
}