Cod sursa(job #3271722)

Utilizator MilitaruMihaiMihaiMIlitaru MilitaruMihai Data 27 ianuarie 2025 09:16:52
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>
#define len 50005
#define inf 1e9
#define pp pair<int,int>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,m,k,d[len],a[len],st,t;
vector <pp> v[len];
priority_queue <pp, vector <pp>, greater <pp> >q;
int verif(int a[],int b[])
{
    for (int i=1;i<=n;i++)
        if (a[i]!=b[i]) return 0;
    return 1;
}
void dijkstra(int st)
{
    for (int i = 1;i <= n;i++)
        d[i] = inf;
    d[st]=0;
    q.push({0,st});
    while (!q.empty())
    {
        int nod = q.top().second;
        int cost = q.top().first;
        q.pop();
        if (d[nod] != cost) continue;
        for (pp i : v[nod])
        {
            int vecin = i.first;
            int cost = i.second;
            if (d[nod] + cost < d[vecin])
            {
                d[vecin] = d[nod] + cost;
                q.push({d[vecin],vecin});
            }
        }
    }
}
int main()
{
    fin>>t;
    for (;t;--t)
    {
        fin>>n>>m>>st;
        for (int i=1;i<=n;i++)
            fin>>a[i];
        for (int i = 1;i <= m;i++)
        {
            int a,b,cost;
            fin>>a>>b>>cost;
            v[a].push_back({b,cost});
            v[b].push_back({a,cost});
        }
        dijkstra(st);
        if (verif(a,d)) fout<<"DA\n";
            else fout<<"NU\n";
    }
    return 0;
}