Cod sursa(job #2040038)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 15 octombrie 2017 12:53:38
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <vector>
#include <bitset>
#define INF 2000000000
#define DIM 50001
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
int n,m,S,i,t,ok,a,b,c,v[DIM],d[DIM];
vector < pair<int,int> > L[DIM];
bitset <DIM> f;
void dfs (int nod){
    f[nod] = 1;
    for (int i=0;i<L[nod].size();i++){
        int vecin = L[nod][i].first;
        if (f[vecin] == 0){
            d[vecin] = min (d[vecin],d[nod] + L[nod][i].second);
            dfs (vecin);
        }
    }
}

int main (){

    fin>>t;
    for (;t--;){
        fin>>n>>m>>S;
        for (i=1;i<=n;i++){
            fin>>v[i];
            d[i] = INF;
        }
        d[S] = 0;
        for (i=1;i<=m;i++){
            fin>>a>>b>>c;
            L[a].push_back(make_pair(b,c));
            L[b].push_back(make_pair(a,c));
            if (a == S)
                d[b] = c;
            else
                if (b == S)
                    d[a] = c;
        }
        f.reset();
        dfs (S);
        ok = 0;
        for (i=1;i<=n;i++)
            if (v[i] != d[i]){
                ok = 1;
                break;
            }
        if (ok == 0)
            fout<<"DA\n";
        else
            fout<<"NU\n";
    }

    return 0;
}