Cod sursa(job #2715390)

Utilizator dumitrustefaniaDumitru Stefania dumitrustefania Data 3 martie 2021 16:56:17
Problema Distante Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>
#define N 50001
#define pb push_back
#define INF 1<<30
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
priority_queue <pair< int,int> > q;
vector <pair<int,int> > v[N];
map <int,int> sol, d;
int t,n,m,s,i,x,y,cost,nod,vec,c,ok;

int main()
{
    f>>t;
    while(t--)
    {
        f>>n>>m>>s;
        for(i=1; i<=n; i++)
        {
            f>>sol[i];
            d[i]=INF;
            v[i].clear();
        }

        for(i=1; i<=m; i++)
        {
            f>>x>>y>>c;
            v[x].pb({y,c});
            v[y].pb({x,c});
        }

        d[s]=0;
        q.push({0,s});
        while(!q.empty())
    {   cost=-q.top().first;
        nod=q.top().second;

        q.pop();

        for(i=0;i<v[nod].size();i++)
        {
            vec=v[nod][i].first;
            if(d[vec]>v[nod][i].second+d[nod])
            {
                 d[vec]=v[nod][i].second+d[nod];
                 q.push({-d[vec],vec});
            }


        }
    }
        ok=1;
        for(i=1;i<=n&&ok;i++)
            if(d[i]!=sol[i])
            ok=0;
        if(ok)
            g<<"DA \n";
        else g<<"NU \n";
    }




    return 0;
}