Pagini recente » Cod sursa (job #1052892) | Cod sursa (job #3138233) | Cod sursa (job #521149) | Cod sursa (job #1418759) | Cod sursa (job #2709113)
#include <bits/stdc++.h>
#define INF 1000000000
#define x first
#define y second
using namespace std;
ifstream f("distante.in"); ofstream g("distante.out");
vector <pair<int,int> >L[50010];
priority_queue <pair<int,int> > q;
int D[50010],Dcit[50010];
int main()
{ int T;
f>>T;
for(int n,m,st;T;T--)
{ f>>n>>m>>st;
for(int i=1;i<=n;i++) f>>Dcit[i];
for(int x,y,c;m;--m)
{ f>>x>>y>>c;
L[x].push_back(make_pair(y,c));
L[y].push_back(make_pair(x,c));
}
for(int i=1;i<=n;i++) D[i]=INF;
D[st]=0;
q.push(make_pair(0,st));
while(!q.empty())
{ ///pair <int,int> P=q.top(); q.pop();
int cost=-q.top().x,nod=q.top().y;
vector <pair<int,int> > :: iterator it=L[nod].begin(),sf=L[nod].end();
for(;it!=sf;++it)
if(D[(*it).x]>cost+(*it).y)
{ D[(*it).x]=cost+(*it).y;
q.push(make_pair(-D[(*it).x],(*it).x));
}
}
int ok=1;
for(int i=1;i<=n;i++)
{ if(D[i]!=Dcit[i]) ok=0;
L[i].clear();
}
if (ok==0) g<<"NU\n"; else g<<"DA\n";
}
g.close(); f.close(); return 0;
}