Cod sursa(job #2354236)

Utilizator HelloWorldBogdan Rizescu HelloWorld Data 25 februarie 2019 01:34:10
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <fstream>
#include <vector>
#include <queue>
#include <limits.h>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int t,n,m,s,d[50001],dist[50001],i,j,x,y,c;
typedef pair <int,int> TIP;
priority_queue<TIP,vector<TIP>,greater<TIP>> Q;
vector <pair<int,int>> a[50001];
void Dijkstra(int nodstart)
{
    Q.push({0,nodstart});
    d[nodstart]=0;
    while (!Q.empty())
    {
        int l=Q.top().first;
        int nod=Q.top().second;
        Q.pop();
        if (l!=d[nod])
            continue;
        for (auto i:a[nod])
        {
            if (d[nod]+i.second<d[i.first])
            {
                d[i.first]=d[nod]+i.second;
                Q.push({d[i.first],i.first});
            }
        }
    }
}
void infinity()
{
    for (int i=1;i<=n;++i)
         d[i]=INT_MAX;
}
int main()
{
    in>>t;
    for (i=1; i<=t; ++i)
    {
        in>>n>>m>>s;
        for (j=1; j<=n; ++j)
            in>>dist[j];
        for (j=1; j<=m; ++j)
        {
            in>>x>>y>>c;
            a[x].push_back({y,c});
            a[y].push_back({x,c});
        }
        infinity();
        Dijkstra(s);
        int ok=1;
        for (j=1; j<=n; ++j)
        {
            if (dist[j]!=d[j])
            {
                ok=0;
                out<<"NU\n";
                break;
            }
        }
        if (ok)
            out<<"DA\n";
    }
}