Cod sursa(job #2885522)

Utilizator iuliavIulia Vincze iuliav Data 6 aprilie 2022 10:28:43
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
//ifstream fin("date.in");
//ofstream fout("date.out");

int n,m,T;
int D[100000],F[100000];
priority_queue< pair<int, int> , vector< pair<int, int> >, greater< pair<int, int> > > Q;
vector < vector < pair <int, int> > > G(100000);

bool dijkstra(int s){
    for(int i=1;i<=n;i++)
        D[i] = 100000;
    D[s]=0;
    Q.push({0, s});
    while(!Q.empty()){
        int dist = Q.top().first;
        s = Q.top().second;
        Q.pop();
        if(dist > D[s])
            continue;
        for(auto x:G[s])
            if(D[x.first] > dist + x.second)
            {
                D[x.first] = dist + x.second;
                Q.push({D[x.first], x.first});
            }
    }
    for(int i=1;i<=n;i++)
        if(D[i]!=100000&&D[i]!=F[i])
            return false;
    return true;
}

int main()
{
    int x, y, c, s;
    fin>>T;
    while(T)
    {
        fin>>n>>m>>s;
        for(int i=1;i<=n;i++)
            fin>>F[i];
        for(int i=0;i<m;i++)
        {
            fin>>x>>y>>c;
            G[x].push_back({y, c});
        }
        if(dijkstra(s))
            fout<<"DA\n";
        else
            fout<<"NU\n";
        T--;
    }
    fin.close();
    fout.close();
    return 0;
}