Cod sursa(job #2344010)

Utilizator TheoPopPopescu Theodor TheoPop Data 14 februarie 2019 17:34:53
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <queue>
#include <vector>
#define Nmax 50001
#define inf 999999999
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
vector <pair <int,int> >G[Nmax];
queue <int>q;
bool viz[Nmax];
int T,n,m,x,y,z,i,graf,v[Nmax],start,d[Nmax],Vecin,Cost;
int main()
{f>>T;
for(graf=1;graf<=T;++graf)
{f>>n>>m>>start;
for(i=1;i<=n;++i)
    f>>v[i];
for(i=1;i<=m;++i)
{f>>x>>y>>z;
G[x].push_back(make_pair(y,z));
G[y].push_back(make_pair(x,z));
}
for(i=1;i<=n;++i)
    {viz[i]=false;
    d[i]=inf;}
    d[start]=0;
    viz[start]=true;
    q.push(start);
    while(!q.empty())
    {x=q.front();
    viz[x]=false;
    q.pop();
    for(unsigned it=0;it<G[x].size();++it)
    {Vecin=G[x][it].first;
    Cost=G[x][it].second;
    if(d[Vecin]>d[x]+Cost)
    {d[Vecin]=d[x]+Cost;
    if(viz[Vecin]==false)
    {q.push(Vecin);
    viz[Vecin]=true;
    }
    }
    }
    }
for(i=1;i<=n;++i)
    if(d[i]!=v[i])
    break;
if(i>n)
    g<<"DA"<<'\n';
else
    g<<"NU"<<'\n';



}
    return 0;
}