Pagini recente » Cod sursa (job #217257) | Cod sursa (job #3240248) | Cod sursa (job #2086000) | Cod sursa (job #1162886) | Cod sursa (job #2358525)
#include <bits/stdc++.h>
using namespace std;
#define inf INT_MAX
#define pb push_back
#define mp make_pair
ifstream fin("distante.in");
ofstream fout("distante.out");
const int N=50009,M=100009;
int t,n,m,s,x,y,c,i;
int prez[N],d[N],ans[N];
vector <pair <int,int> > v[N];
priority_queue < pair<int,int >, vector <pair <int,int > > , greater <pair <int,int> > >h;
void dijkstra(int st)
{
d[st]=0;
h.push(mp(0,st));
while(!h.empty())
{
int nod=h.top().second;
int dist=h.top().first;
h.pop();
if(!prez[nod])
{
prez[nod]=1;
for(int i=0; i<v[nod].size(); i++)
{
if(d[v[nod][i].second]>dist+v[nod][i].first)
{
d[v[nod][i].second]=dist+v[nod][i].first;
h.push(mp(d[v[nod][i].second],v[nod][i].second));
}
}
}
}
}
void solve()
{
fin>>n>>m>>s;
for(i=1; i<=n; i++)
v[x].clear(),d[i]=inf,prez[i]=0;
for(i=1;i<=n;i++)
fin>>ans[i];
for(i=1; i<=m; i++)
{
fin>>x>>y>>c;
v[x].pb(mp(c,y));
v[y].pb(mp(c,x));
}
dijkstra(s);
int stg=0;
for(int i=1; i<=n; i++)
{
if(ans[i]!=d[i])
stg=1;
}
if(stg==0)
fout<<"DA";
else
fout<<"NU";
fout<<'\n';
}
int main()
{
fin>>t;
while(t)
{
t--;
solve();
}
return 0;
}