Pagini recente » Cod sursa (job #1827715) | Cod sursa (job #1475036) | Cod sursa (job #2746581) | Cod sursa (job #991024) | Cod sursa (job #2302924)
#include <bits/stdc++.h>
#define NMAX 50005
#define inf 1e9
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int N , M , G , x , y , cost,c,i,j,nod, S ;
int query;
vector <pair <int,int> > v[NMAX];
priority_queue <pair <int,int> , vector <pair <int,int> >, greater <pair <int,int> > > h;
vector <int> verif;
bool viz[NMAX];
int d[NMAX];
//first= cost
//second= nod
int main()
{
f >> query ;
for (int cnt = 1 ; cnt <= query ; ++ cnt)
{
f >> N >> M >> S;
verif.push_back(inf);
for (i = 1 ; i <= N ; ++i)
{
f >> x ;
verif.push_back(x);
}
for (i = 1 ; i <= M ; i ++)
{
f >> x >> y >> cost;
v[x].push_back(make_pair(cost,y));
v[y].push_back(make_pair(cost,x));
}
for (i = 1 ; i <= N; ++ i)
{
if (i != S) d[i] = inf;
}
d[S] = 0;
h.push(make_pair(0,S));
while(!h.empty())
{
nod = h.top().second;
h.pop();
if (!viz[nod])
for (i = 0 ; i < v[nod].size() ; ++i)
{
if (d[nod] + v[nod][i].first < d[v[nod][i].second])
{
d[v[nod][i].second] = d[nod] + v[nod][i].first;
h.push(make_pair(d[v[nod][i].second] , v[nod][i].second));
}
}
viz[nod] = true;
}
bool Adev = true;
for (i = 1 ; i <= N ; i ++)if (d[i] == inf) d[i] = 0;
for (i = 1 ; i <= N && Adev; i ++)
{
if (d[i] != verif[i]) Adev = false;
}
if (Adev) g<<"DA"<< '\n';
else g <<"NU" << '\n';
verif.clear();
for (i = 1; i <= M ; ++i)
v[i].clear();
}
}