Cod sursa(job #1450917)

Utilizator robx12lnLinca Robert robx12ln Data 15 iunie 2015 10:18:33
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<fstream>
#include<vector>
#define INF 2000000000
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector< pair<int,int> > v[36005];
int d[36005],f[36005],df[36005];
int n,m,x,y,z,ok,vecin,minim,cost;
void dijkstra(int nod){
    int i;
    for(i=1;i<=n;i++){
        d[i]=INF;
        f[i]=0;
    }
    d[nod]=0;
    ok=0;
    while(ok==0){
        minim=INF;
        for(i=1;i<=n;i++)
            if(f[i]==0 && d[i]<minim){
                minim=d[i];
                nod=i;
            }
        if(minim==INF)
            break;
        f[nod]=1;
        for(i=0;i<v[nod].size();i++){
            vecin=v[nod][i].first;
            cost=v[nod][i].second;
            if(f[vecin]==0 && d[vecin]>d[nod]+cost)
                d[vecin]=d[nod]+cost;
        }
    }
}
int i,t,S,VAL;
int main(){
    fin>>t;
    for(;t;t--){
        fin>>n>>m>>S;
        for(i=1;i<=n;i++){
            fin>>df[i];
        }
        for(i=1;i<=m;i++){
            fin>>x>>y>>z;
            v[x].push_back(make_pair(y,z));
            v[y].push_back(make_pair(x,z));
        }
        dijkstra(S);
        VAL=0;
        for(i=1;i<=n;i++){
            if(d[i]!=df[i]){
                VAL=1;
                break;
            }
        }
        if(VAL==0){
            fout<<"DA\n";
        }else{
            fout<<"NU\n";
        }
    }
    return 0;
}