Cod sursa(job #2317207)

Utilizator maria15Maria Dinca maria15 Data 12 ianuarie 2019 22:30:15
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <fstream>
#include <vector>
#include <deque>
#define inf 100000001

using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

int n, t, i, m, rad, a[50001], d[50001], f[50001], c, crt, dist, nod, e, b;
vector<pair<int, int> > v[50001];
deque<int> q;
char ok;

int main(){
    fin>>t;
    while(t--){
        fin>>n>>m>>rad;
        for(i=1;i<=n;i++){
            fin>>d[i];
            a[i] = inf;
        }
        for(i=1;i<=m;i++){
            fin>>e>>b>>c;
            v[e].push_back(make_pair(b, c));
        }
        q.push_back(rad);
        f[rad] = 1;
        a[rad] = 0;
        while(!q.empty()){
            nod = q[0];
            for(i = 0;i<v[nod].size();i++){
                crt = v[nod][i].first;
                dist = v[nod][i].second;
                if(a[nod] + dist < a[crt]){
                    a[crt] = a[nod] + dist;
                    if(f[crt] == 0){
                        f[crt] = 1;
                        q.push_back(crt);
                    }
                }
            }
            q.pop_front();
            f[nod] = 0;
        }
        ok = 0;
        for(i=1;i<=n;i++)
            if(d[i] != a[i]){
                fout<<"NU\n";
                ok = 1;
                break;
            }
        for(i=1;i<=n;i++)
            a[i] = f[i] = d[i] = 0;
        if(ok == 0)
            fout<<"DA\n";
        for(i=1;i<=n;i++)
            v[i].clear();
    }
    return 0;
}