Cod sursa(job #2629799)

Utilizator eugen5092eugen barbulescu eugen5092 Data 22 iunie 2020 17:57:50
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>
using namespace std;

ifstream ci("distante.in");
ofstream cou("distante.out");

struct date{
    int nod,cost;
};

vector<date>v[50005];
int dis[50005];
int dp[50005];
queue<int>q;
int i,a,b,s,m,n,c,t;

void reseteaza(){
    for(int i=1;i<=n;i++){
        while(!v[i].empty()){
            v[i].pop_back();
        }
        dp[i]=0;
        dis[i]=0;
    }
    while(!q.empty()){
        q.pop();
    }
}

void Djakstra(){
    int w;
    w=1;
    q.push(w);
    while(!q.empty()){
        w=q.front();
        q.pop();
        for(auto i:v[w]){
            if(dp[i.nod]>dp[w]+i.cost||dp[i.nod]==0){

                dp[i.nod]=dp[w]+i.cost;
                q.push(i.nod);
            }
        }
    }
    dp[1]=0;

}

void rez(){
    Djakstra();
    int veri=1;
    for(int i=1;i<=n;i++){
        if(dp[i]!=dis[i]){
            veri=0;
        }
    }
    if(veri==1){
        cou<<"DA \n";
    }else{
        cou<<"NU \n";
    }
}

void citire(){
    ci>>t;
    while(t--){
        ci>>n>>m>>s;
        for(int i=1;i<=n;i++){
            ci>>dis[i];
        }
        date p;
        for(int i=1;i<=m;i++){
            ci>>a>>b>>c;
            p.cost=c;
            p.nod=b;
            v[a].push_back(p);
            p.nod=a;
            v[b].push_back(p);
        }
        rez();
        reseteaza();
    }
}

int main()
{
    citire();
    return 0;
}