Cod sursa(job #2572218)

Utilizator dumitrustefania1DUMITRU STEFANIA dumitrustefania1 Data 5 martie 2020 12:09:18
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define nmax 50005
#define pb push_back
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int tt,t,i,n,m,r,verifica[nmax],d[nmax],x,y,c,cost1,cost,nod,vec,ok;
vector <pair<int,int> > v[nmax];
priority_queue <pair<int,int> > q;
int main()
{   f>>t;
for(tt=1;tt<=t;tt++)
{
    f>>n>>m>>r;
    for(i=1;i<=n;i++)
    { f>>verifica[i];
    d[i]=1<<30;

    }

    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        v[x].pb({y,c});
        v[y].pb({x,c});
    }
    d[r]=0;
    q.push({0,r});
    while(!q.empty())
    {   nod=q.top().second;
    cost1=-q.top().first;
    q.pop();
        for(i=0;i<v[nod].size();i++)
        {
            vec=v[nod][i].first;
            cost=v[nod][i].second;
            if(d[vec]>cost1+cost)
            {
                d[vec]=cost1+cost;
                q.push({-d[vec],vec});
            }
        }
    }
    ok=1;
    for(i=1;i<=n&&ok;i++)
    {
         if(verifica[i]!=d[i])
    ok=0;
    }


    if(ok)
        g<<"DA \n";
    else
        g<<"NU \n";

}
    return 0;
}