Cod sursa(job #3304386)

Utilizator Alexia12345Maftei Alexia Alexia12345 Data 23 iulie 2025 10:32:46
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <bits/stdc++.h>
#define INF 1000000009
using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

int n,p,i,j,c,d[105],m,dd[105];
struct arc
{
    int nod,cost;
    bool operator <(const arc& x) const{
        return cost>x.cost;
    }
};
priority_queue<arc>pq;
vector<arc>v[105];
bool viz[105],ok;

int main()
{
    int t;
    fin>>t;
    while(t--)
    {
        ok=0;
        fin>>n>>m>>p;
        for(int k=1;k<=n;k++)
            fin>>dd[k];
        for(int k=1;k<=m;k++)
        {
            fin>>i>>j>>c;
            v[i].push_back({j,c});
        }
        pq.push({p,0});
        for(i=1;i<=n;i++)
            d[i]=INF;
        d[p]=0;
        while(!pq.empty())
        {
            arc node=pq.top();
            pq.pop();
            if(viz[node.nod])
                continue;
            viz[node.nod]=1;
            for(auto vecin:v[node.nod])
            {
                if(d[vecin.nod]>d[node.nod]+vecin.cost)
                {
                    d[vecin.nod]=d[node.nod]+vecin.cost;
                    pq.push({vecin.nod,d[vecin.nod]});
                }
            }
        }
        for(i=1;i<=n;i++)
        {
            if(d[i]!=dd[i])
                ok=1;
        }
        if(ok)  fout<<"NU\n";
        else fout<<"DA\n";
    }
    return 0;
}