Cod sursa(job #2703635)

Utilizator VladNANegoita Vlad-Andrei VladNA Data 8 februarie 2021 20:57:45
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>
#define NMAX 50001
#define inf 2e9
using namespace std;

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

int Bronzarel[NMAX],d[NMAX];
int n,m,s;
vector< pair<int,int> > adj[NMAX];

void dijkstra()
{
    priority_queue< pair <int, int> > pq;
    pq.push({0,s});
    while(!pq.empty())
    {
        int u=pq.top().second;
        pq.pop();
        for(vector< pair<int,int> >::iterator it=adj[u].begin();it!=adj[u].end();it++)
        {
            int v=it->first;
            int cost=it->second;
            if(d[u]+cost<d[v])
            {
                d[v]=d[u]+cost;
                pq.push({-d[v],v});
            }
        }
    }
    bool ok=true;
    for(int i=1;i<=n;i++)
        if(d[i]!=Bronzarel[i])
            ok=false;
    if(ok)
        out<<"DA\n";
    else
        out<<"NU\n";
}

void curatenie()
{
    for(int i=1;i<=n;i++)
        adj[i].clear();
    for(int i=1;i<=n;i++)
        d[i]=inf;
    d[s]=0;
}

int main()
{
    int q;
    in>>q;
    for(int t=1;t<=q;t++)
    {
        in>>n>>m>>s;
        for(int i=1;i<=n;i++)
            in>>Bronzarel[i];
        curatenie();
        for(int i=1;i<=m;i++)
        {
            int a,b,c;
            in>>a>>b>>c;
            adj[a].push_back({b,c});
            adj[b].push_back({a,c});
        }
        dijkstra();
    }
    return 0;
}