Cod sursa(job #2366661)

Utilizator YediuTeZediu Almos-Agoston YediuTe Data 4 martie 2019 21:27:19
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <iostream>
#include <fstream>
#include <set>
#include <vector>
#define MAX_long long 99999

using namespace std;

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

long long T;
long long N, M, S;

void solve(long long N, long long M, long long S)
{
    S--;
    vector<long long> givenDist;
    vector<long long> dist(N, MAX_long long);
    vector< pair<long long, long long> > emptyVec;
    vector< vector< pair<long long, long long> > > graph;
    for(long long i = 0; i < N; i++){
        graph.push_back(emptyVec);
        long long val;
        f >> val;
        givenDist.push_back(val);
    }
    for(long long i = 0; i < M; i++)
    {
        long long weight, from, to;
        f >> from >> to >> weight;
        from--, to--;
        graph[from].push_back(make_pair(to, weight));
        graph[to].push_back(make_pair(from, weight));
    }

    set< pair<long long,long long> > minSet;
    minSet.insert(make_pair(0, S));
    dist[S] = 0;
    while(!minSet.empty()){
        pair<long long,long long> temporary = *(minSet.begin());
        minSet.erase(minSet.begin());
        long long currentNode = temporary.second;
        for(long long i = 0; i < graph[currentNode].size(); i++){
            long long node = graph[currentNode][i].first;
            long long weight = graph[currentNode][i].second;
            if(dist[node] > dist[currentNode] + weight){
                if(dist[node] == MAX_long long)
                    minSet.erase(make_pair(dist[node], node));
                dist[node] = dist[currentNode] + weight;
                minSet.insert(make_pair(dist[node], node));
            }
        }
    }
    if(givenDist == dist)
        g << "DA" << endl;
    else
        g << "NU" << endl;
}

long long main()
{
    f >> T;
    for(long long i = 0; i < T; i++){
        f >> N >> M >> S;
        solve(N,M,S);
    }
}