Cod sursa(job #2627096)

Utilizator aser.cobaschiCobaschi Aser aser.cobaschi Data 9 iunie 2020 19:24:26
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int oo=1000000000;
const int N=50010;
int t,n,m,s,x,y,c,d[N],dd[N];
vector<pair<int,int>> v[N];
priority_queue <pair<int,int>> pq;
int main()
{
    f>>t;
    for(;t;t--)
    {
        f>>n>>m>>s;
        for(int i=1;i<=n;i++)
            f>>dd[i];
        for(;m;m--)
        {
            f>>x>>y>>c;
            v[x].push_back(make_pair(y,c));
            v[y].push_back(make_pair(x,c));
        }

        fill(d+1,d+n+1,oo);
        d[s]=0;
        pq.push(make_pair(0,s));
        while(pq.size())
        {
            int dist,nod;
            tie(dist,nod)=pq.top();
            pq.pop();
            dist=-dist;
            if(dist>d[nod])
                continue;
            for(auto it:v[nod])
            {
                int vec,dvec;
                tie(vec,dvec)=it;
                if(d[vec]>dist+dvec)
                {
                    d[vec]=dist+dvec;
                    pq.push(make_pair(-d[vec],vec));
                }
            }
        }
    bool da=true;
    for(int i=1;i<=n;i++)
    {
        if(d[i]==oo)
            d[i]=0;
        if(d[i]!=dd[i])
            da=false;

    }
    if(da)
        g<<"DA"<<'\n';
    else g<<"NU"<<'\n';
    }
    return 0;
}