Cod sursa(job #2302790)

Utilizator alexandruilieAlex Ilie alexandruilie Data 15 decembrie 2018 10:18:04
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50010
#define inf 2e9
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
vector <pair<int,int> > v[NMAX];
priority_queue <pair<int,int>,vector <pair<int,int> >,greater <pair<int,int> > > h;
int n,d[NMAX],d1[NMAX],t,i1,i2,i,m,st,x,y,c,ok;
void dijkstra(int st)
{
    int i,nod,dst,vec;
    for(i=1;i<=n;i++) d[i]=inf;
    d[st]=0;
    h.push({0,st});
    while(!h.empty())
    {
        nod=h.top().second;
        h.pop();
        for(i=0;i<v[nod].size();i++)
        {
            vec=v[nod][i].first;
            dst=v[nod][i].second;
            if(d[vec]>d[nod]+dst) {d[vec]=d[nod]+dst;h.push({d[vec],vec});}
        }
    }
}
int main()
{
    f>>t;
    for(i1=1;i1<=t;i1++)
    {
        f>>n>>m>>st;
        for(i2=1;i2<=n;i2++)
            f>>d1[i2];
        for(i2=1;i2<=m;i2++)
        {
            f>>x>>y>>c;
            v[x].push_back({y,c});
            v[y].push_back({x,c});
        }
        dijkstra(st);
        ok=1;
        for(i=1;i<=n;i++) v[i].clear();
        for(i=1;i<=n&&ok;i++) if(d[i]!=d1[i]) ok=0;
        if(ok) g<<"DA"<<'\n';
        else g<<"NU"<<'\n';
    }
    return 0;
}