Cod sursa(job #2445498)

Utilizator DavidAA007Apostol David DavidAA007 Data 4 august 2019 12:44:22
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
#include<vector>
#include<queue>
#include<string.h>
#include<iostream>
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("distante.in");
ofstream g("zdistante.out");
int d[50005],n,m,x,y,c,i,s,T,t;
int rasp[50005];
vector< pair<int, int> > v[50005];
priority_queue< pair<int,int>, vector<pair<int,int> >, greater<pair<int,int> > > q;
void dijkstra(int nod)
{
    memset(d,inf,sizeof(d));
    q.push({0,nod});
    d[nod]=0;
    while(!q.empty())
    {
        int w=q.top().second;
        int d1=q.top().first;
        q.pop();
        if(d1==d[w])
            for(i=0;i<v[w].size();i++)
                if(d[v[w][i].first]>d[w]+v[w][i].second)
                {
                    d[v[w][i].first]=d[w]+v[w][i].second;
                    q.push({d[v[w][i].first],v[w][i].first});
                }
    }
    for(i=2;i<=n;i++)
        if(d[i]==inf)
            d[i]=0;
}
int main()
{
    f>>T;
    for(t=1;t<=T;t++)
    {
        f>>n>>m>>s;
        memset(rasp,0,sizeof(rasp));
        for(i=1;i<=n;i++)
            f>>rasp[i];
        for(i=1;i<=m;i++)
        {
            f>>x>>y>>c;
            v[x].push_back({y,c});
        }
        dijkstra(s);
        bool ok=1;
        for(i=1;i<=n;i++)
            if(d[i]!=rasp[i])
            {
                ok=0;
                break;
            }
        if(ok==0)
            g<<"NU\n";
        else
            g<<"DA\n";
    }
    f.close();
    g.close();
    return 0;
}