Cod sursa(job #2302888)

Utilizator nicholascantarNicholas David Cantar Gogitidze nicholascantar Data 15 decembrie 2018 11:20:17
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50010
#define inf 2e9
using namespace std;
ifstream fin("distante.in");
ofstream fout("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()
{
    fin>>t;
    for(i1=1;i1<=t;i1++)
    {
        fin>>n>>m>>st;
        for(i2=1;i2<=n;i2++)
            fin>>d1[i2];
        for(i2=1;i2<=m;i2++)
        {
            fin>>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) fout<<"DA"<<'\n';
        else fout<<"NU"<<'\n';
    }
    return 0;
}