Cod sursa(job #3344174)

Utilizator Dragos__1_1Dragos Antohi Dragos__1_1 Data 1 martie 2026 15:43:26
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int t,n,m,i,j,a,b,c,s,dinit[50002],d[50002];
vector<pair<int,int>>v[50002];
void dijk(int st){
    for(int i=1;i<=n;i++){
        d[i]=1e9;
    }
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>PQ;
    PQ.push({0,st});
    d[st]=0;
    while(!PQ.empty()){
        tie(a,b)=PQ.top();
        PQ.pop();
        if (a>d[b])continue;
        for (auto it:v[b]){
            if (d[it.se]>d[b]+it.fi){
                d[it.se]=d[b]+it.fi;
                PQ.push({d[it.se],it.se});
            }
        }
    }
    for (int i=1;i<=n;i++){
        if (d[i]!=dinit[i]){
            g<<"NO\n";
            return;
        }
    }
    g<<"YES\n";
}
int main()
{   f>>t;
    while(t--){
        f>>n>>m>>s;
        for(i=1;i<=n;i++){
            f>>dinit[i];
        }
        for(i=1;i<=m;i++){
            f>>a>>b>>c;
            v[a].push_back({c,b});
            v[b].push_back({c,a});
        }
        dijk(s);
        for (i=1;i<=n;i++){
            v[i].clear();
        }

    }
    return 0;
}