Pagini recente » Cod sursa (job #807024) | Cod sursa (job #2450474) | Cod sursa (job #1968213) | Cod sursa (job #2089252) | Cod sursa (job #3300727)
#include <bits/stdc++.h>
using namespace std;
vector <int> s[50005];
vector <int> p[50005];
int d[50005];
int pr[50005];
priority_queue <pair<int,int>,vector<pair<int,int>>,greater<>> q;
int main()
{
ifstream cin("distante.in");
ofstream cout("distante.out");
int t,n,m,ss,x,y,c;
cin>>t;
for(int h=1;h<=t;++h)
{
cin>>n>>m>>ss;
for(int i=1;i<=n;++i)
{
pr[i]=INT_MAX;
s[i].clear();
p[i].clear();
}
for(int i=1;i<=n;++i)
{
cin>>d[i];
}
for(int i=1;i<=m;++i)
{
cin>>x>>y>>c;
s[x].push_back(y);
s[y].push_back(x);
p[x].push_back(c);
p[y].push_back(c);
}
pr[ss]=0;
q.emplace(0,ss);
while(q.size())
{
int price,pnt;
price=q.top().first;
pnt=q.top().second;
if(price>pr[pnt])
{
}
else
{
for(int i=0;i<s[pnt].size();++i)
{
int pri,ngb;
ngb=s[pnt][i];
pri=price+p[pnt][i];
if(pri<pr[ngb])
{
pr[ngb]=pri;
q.emplace(pri,ngb);
}
}
}
q.pop();
}
bool ok=true;
for(int i=1;i<=n;++i)
{
// cout<<pr[i]<<" ";
if(d[i]!=pr[i])
{
ok=false;
break;
}
}
if(ok==true)
{
cout<<"DA";
}
else
{
cout<<"NU";
}
cout<<"\n";
}
return 0;
}