Cod sursa(job #2040720)

Utilizator luanastLuana Strimbeanu luanast Data 16 octombrie 2017 12:21:57
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
#include <set>
#define inf 10000000001LL
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
int T,N,M,i,t,S,x,y,c,d[100001];
vector <int> bron;
vector <pair<int,int> > L[50001];
multiset <pair<int,int> > s;
int main(){
    fin>>T;
    for(t=1;t<=T;t++){
        fin>>N>>M>>S;
        for(i=1;i<=N;i++){
            fin>>x;
            bron.push_back(x);
            d[i]=inf;
        }
        for(i=1;i<=M;i++){
            fin>>x>>y>>c;
            L[x].push_back(make_pair(y,c));
            L[y].push_back(make_pair(x,c));
        }
        d[S]=0;
        s.insert(make_pair(0,S));
        while(!s.empty()){
            x=s.begin()->second;
            s.erase(s.begin());
            for(vector <pair<int,int> > :: iterator it=s.begin();it!=s.end();it++){
                dist=it->first;
                nodv=it->first;
                if(d[nodv]<d[x]+dist){
                    s.erase(make_pair(d[nodv],nodv));
                    d[nodv]=d[x]+dist;
                    s.insert(make_pair(d[nodv],nodv));
                }
            }
        }
        ok=1;
        for(i=1;i<=n;i++){
            if(bron[i]!=d[i])
                ok=0;
        }
        if(ok)
            fout<<"DA\n";
        else
            fout<<"NU\n";
        bron.erase();
    }
    return 0;
}