Cod sursa(job #3271752)

Utilizator BalanelBalan Stefan Balanel Data 27 ianuarie 2025 10:48:46
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<bits/stdc++.h>
#define pi pair<int, int>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int t,n,m,s,a,b,c,d[50001],x[50001];
vector<pi> v[50001];
priority_queue<pi, vector<pi>, greater<pi> > q;
void dijk(int s) {
    for(int i=1;i<=n;++i)
        x[i]=1e9;
    x[s]=0;
    q.push({0,s});
    while(!q.empty()) {
        pi p=q.top();
        if(x[p.second]==p.first)
            for(pi i : v[p.second])
                if(x[p.second]+i.second<x[i.first]) {
                    x[i.first]=x[p.second]+i.second;
                    q.push({x[i.first],i.first});
                    }
        q.pop();
        }
}
bool verif() {
    for(int i=1;i<=n;++i)
        if(d[i]!=x[i]) return 0;
    return 1;
}
int main()
{in>>t;
for(int k=1;k<=t;++k) {
    in>>n>>m>>s;
    for(int i=1;i<=n;++i)
        in>>d[i];
    for(int i=1;i<=m;++i) {
        in>>a>>b>>c;
        v[a].push_back({b,c});
        v[b].push_back({a,c});
        }
    dijk(s);
    if(verif()) out<<"DA"<<'\n';
        else out<<"NU"<<'\n';
    }
return 0;
}