Cod sursa(job #2707722)

Utilizator bluestorm57Vasile T bluestorm57 Data 17 februarie 2021 17:28:01
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 50005;
const int inf = 1e9;
vector < pair < int, int > > v[NMAX];
int n,m,s,distans[NMAX],dist[NMAX],viz[NMAX];
priority_queue < pair < int, int > > q;

int main(){
    int i,j,x,y,z,T,node;
    f >> T;
    while(T--){
        f >> n >> m >> s;
        for(i = 1 ; i <= n ; i++){
            dist[i] = inf;
            viz[i] = 0;
            f >> distans[i];
            v[i].clear();
        }

        for(i = 1 ; i <= m ; i++){
            f >> x >> y >> z;
            v[x].push_back({y,z});
            v[y].push_back({x,z});
        }

        q.push({0,s});
        dist[s] = 0;
        bool flag = true;
        while(!q.empty()){
            node = q.top().second;
            q.pop();

            if(viz[node])
                continue;
            if(dist[node] != distans[node])
                flag = false;
            viz[node] = 1;

            for(auto it : v[node])
                if(dist[it.first] > dist[node] + it.second){
                    dist[it.first] = dist[node] + it.second;
                    q.push({-dist[it.first], it.first});
                }
        }

        if(flag)
            g << "DA\n";
        else
            g << "NU\n";
    }

    return 0;
}