Cod sursa(job #2907395)

Utilizator 134_tufa_liliana_ionelaTufa Liliana Ionela 134_tufa_liliana_ionela Data 30 mai 2022 01:16:25
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
priority_queue<pair<int, int>> coada;
vector <vector<pair <int, int>>> CosturiMuchii;
vector <int> distanta;
vector <bool> vizitat;
vector<int> Dijkstra(int x, int n){
    distanta[x]=0;
    coada.push(make_pair(0, x));
    while(!coada.empty())
    {
        int NodCurent = coada.top().second;
        coada.pop();
        if(vizitat[NodCurent]==false)
          {

            vizitat[NodCurent]=true;

            for(auto i : CosturiMuchii[NodCurent])
            {
                int vecin = i.first;
                int cost = i.second;

                if(distanta[NodCurent] + cost <distanta[vecin])
                {
                    distanta[vecin] = distanta[NodCurent] + cost;
                    coada.push(make_pair(-distanta[vecin], vecin));
                }
            }
          }
    }
    for(int i=1; i<=n;i++)
        if(distanta[i]==INT_MAX)
            distanta[i]=0;
    return distanta;
}

int main()
{
    int t, n, m, a, b, c, x;
    f>>t;

    for(int i=0; i<t; i++){
        f>>n>>m>>x;
        vector <int> bronzarel(n+1, 0);
        CosturiMuchii.resize(n+1);
        distanta.resize(n+1, INT_MAX);
        vizitat.resize(n+1, false);
        bool verif = true;
        for(int i=1; i<=n; i++){
            f>>a;
            bronzarel[i]=a;
        }
        for(int i=0; i<m; i++)
        {
            f>>a>>b>>c;
            CosturiMuchii[a].push_back(make_pair(b,c));
            CosturiMuchii[b].push_back(make_pair(a,c));

        }
        vector<int> v = Dijkstra(x, n);

        for(int i=1; i<=n; i++)
            if(bronzarel[i]!=distanta[i])
                verif = false;
        if(verif)
            g<<"DA"<<'\n';
        else
            g<<"NU"<<'\n';
        bronzarel.clear();
        vizitat.clear();
        distanta.clear();
        CosturiMuchii.clear();
        v.clear();
        }
}