Cod sursa(job #2570188)

Utilizator AlinaaaaAgurida Alina Maria Alinaaaa Data 4 martie 2020 15:28:05
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb

#include <bits/stdc++.h>

using namespace std;

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


class cmp
{
    public:
    bool operator ()(pair <int, int> &a, pair<int, int> &b)
    {
        return a.second>b.second;
    }
};
priority_queue < pair <int, int>, vector <pair<int, int> >, cmp> pq;
int n, p, m;
vector <pair <int, int> > graf[100001];
int dist[100001];
void initializare(int p)
{
    int i;
    for (i = 1; i<=n; ++i)
        if (i!=p) dist[i] = 2000000000;
}

queue <int>bee;
int y, i, j, x, nod, cost, d,s;
int main()
{
    f>>s;
    for(i=1;i<=s;i++)
    {

    f >> n >> m >> p;
    for(j=1;j<=n;j++)
        {
             f>>x;
             bee.push(x);
            // g<<bee.back();
        }
    initializare(p);

    for (i = 0; i<m; ++i)
    {
        f >> x >> y >> d;
        graf[x].push_back (make_pair(y, d));
        graf[y].push_back (make_pair(x, d));
    }
    pq.push(make_pair(p, dist[p]));
    while (pq.size())
    {
        nod = pq.top().first;
        cost = pq.top().second;
        pq.pop();
        if (dist[nod] != cost)
            continue;
        for (auto x : graf[nod])
        {
            if (cost + x.second < dist[x.first])
            {
                dist[x.first] = cost+x.second;
                pq.push(make_pair(x.first, dist[x.first]));
            }
        }
    }
    int ok=0;
    for (i = 1; i<=n&&!ok; ++i)
        {if (dist[i] != bee.front())
ok=1;
bee.pop();
        }
        if(ok)
            g<<"NU"<<endl;
        else
            g<<"DA"<<endl;
        }
    return 0;
}