Cod sursa(job #3168117)

Utilizator vladsoartavlad sofronea vladsoarta Data 11 noiembrie 2023 16:17:08
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>
#include <vector>
#include <utility>
#include <set>
#define inf 100000001
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");

int n,m,inc,rspcomp[50001],t,i;

vector<pair<int,int>>g[50001];

void dijkstra(int incep)
{
    bool viz[50001]= {};
    int dist[50001]= {};
    for(int j=2; j<=n; j++)
        dist[j]=inf;
    set<pair<int,int>>s;
    s.insert({0,1});
    while(!s.empty())
    {
        int nod = (*s.begin()).second;
        int val = (*s.begin()).first;
        s.erase(s.begin());

        viz[nod]=1;

        for(auto vecin:g[nod])
        {
            int nxt = vecin.first;
            int c = vecin.second;

            if(!viz[nxt]&&c+val<dist[nxt])
            {
                s.erase({dist[nxt],nxt});
                dist[nxt]=c+val;
                s.insert({dist[nxt],nxt});
            }

        }

    }
    bool ok=1;
    for(int j=1;j<=n;j++)
        if(dist[j]!=rspcomp[j])
            ok=0;
    if(ok==0)
        cout<<"NU"<<'\n';
    else
        cout<<"DA"<<'\n';

}

int main()
{
    cin>>t;
    for(i=1; i<=t; i++)
    {
        cin>>n>>m>>inc;
        for(int j=1; j<=n; j++)
            cin>>rspcomp[j];
        for(int j=1; j<=m; j++)
        {
            int x,y,c;
            cin>>x>>y>>c;
            g[x].push_back({y,c});
            g[y].push_back({x,c});
        }
        dijkstra(inc);
        for(int j=1;j<=n;j++)
            g[j].clear();
    }

    return 0;
}