Cod sursa(job #2176416)

Utilizator TooHappyMarchitan Teodor TooHappy Data 17 martie 2018 12:00:12
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <bits/stdc++.h>
using namespace std;
  
ifstream in("distante.in");
ofstream out("distante.out");

const int NMax = 50005;
const int inf = 1e9;

vector< vector< pair< int, int > > > G(NMax);
vector< int > distante(NMax);

void dijkstra(int nodSursa) {
    priority_queue< pair< int, int >, vector< pair< int, int > >, greater< pair< int, int > > > pq;
    distante[nodSursa] = 0;
    pq.push(make_pair(0, nodSursa));

    while(!pq.empty()) {
        int tempNode = pq.top().second; pq.pop();

        for(auto vecin: G[tempNode]) {
            if(distante[tempNode] + vecin.second < distante[vecin.first]) {
                distante[vecin.first] = distante[tempNode] + vecin.second;
                pq.push(make_pair(distante[vecin.first], vecin.first));
            }
        }
    }
}

int main() {
 
    int T; in >> T;

    while(T--) {
        int n, m, nodSursa; in >> n >> m >> nodSursa;

        distante.resize(n + 1);
        for(int i = 1; i <= n; ++i) {
            distante[i] = inf;
        }
        
        vector< int > distanteBronzorel(n + 1);
        for(int i = 1; i <= n; ++i) {
            in >> distanteBronzorel[i];
        }

        for(int i = 1; i <= m; ++i) {
            int a, b, c; in >> a >> b >> c;
            G[a].push_back(make_pair(b, c));
            G[b].push_back(make_pair(a, c));
        }

        dijkstra(nodSursa);

        bool ok = true;
        for(int i = 1; i <= n && ok; ++i) {
            if(distante[i] != distanteBronzorel[i]) {
                out << "NU\n";
                ok = false;
            }
        }

        if(ok) {
            out << "DA\n";
        }

        for(int i =1; i <= n; ++i) {
            G[i].clear();
        }
    }
    
    in.close(); out.close();
  
    return 0;
}