Pagini recente » Cod sursa (job #1400911) | Cod sursa (job #2961612) | Cod sursa (job #1226205) | Cod sursa (job #1924202) | Cod sursa (job #2715385)
#include <bits/stdc++.h>
#define N 50001
#define pb push_back
#define INF 1<<30
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
priority_queue <pair< int,int> > q;
vector <pair<int,int> > v[N];
map <int,int> sol, d;
int t,n,m,s,i,x,y,cost,nod,vec,c,ok;
int main()
{
f>>t;
while(t--)
{
f>>n>>m>>s;
for(i=1; i<=n; i++)
{
f>>sol[i];
d[i]=INF;
v[i].clear();
}
for(i=1; i<=m; i++)
{
f>>x>>y>>c;
v[x].pb({y,c});
v[y].pb({x,c});
}
d[s]=0;
q.push({0,s});
while(q.size())
{
cost=-q.top().first;
nod=q.top().second;
q.pop();
if(cost==d[nod])
for(i=0; i<v[nod].size(); i++)
{
vec=v[nod][i].first;
if(d[vec]>d[nod]+v[nod][i].second)
{
d[vec]=d[nod]+v[nod][i].second;
q.push({-d[vec],vec});
}
}
}
ok=1;
for(i=1;i<=n&&ok;i++)
if(d[i]!=sol[i])
ok=0;
if(ok)
g<<"DA \n";
else g<<"NU \n";
}
return 0;
}