Cod sursa(job #2654730)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 2 octombrie 2020 09:29:34
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <algorithm>
#include <vector>
#include <deque>
#define dim 50010
using namespace std;
vector<pair<int,int> >a[dim];
deque<int> c;
int f[dim];
int sol[dim];
int d[dim];
int i,n,m,t,s,cost,nod,vecin,ok,x,y;

int main() {
    ifstream fin("distante.in");
    ofstream fout("distante.out");
    fin>>t;
    for (;t--;) {
        c.clear();
        fin>>n>>m>>s;
        for (i=1;i<=n;i++) {
            fin>>sol[i];
        }
        for (i=1;i<=m;i++) {
            fin>>x>>y>>cost;
            a[x].push_back({y,cost});
            a[y].push_back({x,cost});
        }
        for (i=1;i<=n;i++) {
            sort(a[i].begin(),a[i].end());
        }
        c.push_back(s);
        d[s]=0;
        f[s]=1;
        while (c.empty()!=1) {
            nod=c.front();
            for (i=0;i<a[nod].size();i++) {
                vecin=a[nod][i].first;
                if (f[vecin]==0) {
                    f[vecin]=1;
                    d[vecin]=d[nod]+a[nod][i].second;
                    c.push_back(vecin);
                }
            }
            c.pop_front();
        }
        ok=1;
        for (i=1;i<=n;i++) {
            if (d[i]!=sol[i]) {
                ok=0;
                fout<<"NU"<<"\n";
                break;
            }
        }
        if (ok) fout<<"DA"<<"\n";
        for (i=1;i<=n;i++) {
            a[i].clear();
            f[i]=0;
        }
    }
    return 0;
}