Cod sursa(job #3264094)

Utilizator BogdanDavDavid Bogdan BogdanDav Data 18 decembrie 2024 13:00:31
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <fstream>
#include <queue>
#include <vector>
#define inf 1e9
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
int T,n,m;//NOD,VAL
vector<pair<int,int>> g[50002];
int viz[50002],d[50002],ans[50002];
void Dijkstra(int nod,int N){
    for(int i=1;i<=N;i++){
        viz[i]=0;
        d[i]=inf;
    }
    int i,cc;
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;
    q.push({0,nod});
    d[nod]=0;
    while(!q.empty()){
        nod=q.top().second;
        cc=q.top().first;
        q.pop();
        if(cc<=d[nod]){
            for(auto it : g[nod]){
                i=it.first;
                if(d[i] > cc+it.second){
                    d[i]=cc+it.second;
                    q.push({d[i],i});
                }
            }
        }
    }
}
int main()
{
    cin>>T;
    int nod;
    while(T){
        T--;
        cin>>n>>m>>nod;
        for(int i=1;i<=n;i++) cin>>ans[i];
        int a,b,c;
        for(int i=1;i<=m;i++){
            cin>>a>>b>>c;
            g[a].push_back({b,c});
            g[b].push_back({a,c});
        }
        Dijkstra(nod,n);
        int ok=1;
        for(int i=1;i<=n&&ok==1;i++){
            if(ans[i]!=d[i])
                ok=0;
        }
        if(ok==1)
            cout<<"DA\n";
        else
            cout<<"NU\n";
    }
    return 0;
}