Pagini recente » Cod sursa (job #2333215) | Cod sursa (job #2708215) | Cod sursa (job #856389) | Cod sursa (job #2381417) | Cod sursa (job #2653877)
#include <fstream>
#include <vector>
#include <queue>
#define DIM 50001
#define INF 2000000000
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
int t,n,m,i,a,b,c,x,y,s,vecin,ok,d[DIM],w[DIM];
priority_queue <pair<int,int>,vector< pair<int,int> >, greater < pair<int,int> > > H;
vector < pair<int,int> > v[DIM];
int main (){
fin>>t;
for (;t--;){
fin>>n>>m>>s;
for (i=1;i<=n;i++){
fin>>w[i];
v[i].clear();
d[i] = INF;
}
d[s] = 0;
for (i=1;i<=m;i++){
fin>>a>>b>>c;
v[a].push_back (make_pair(b,c));
v[b].push_back (make_pair(a,c));
}
H.push (make_pair(0,s));
while (!H.empty()){
x = H.top().second;
y = H.top().first;
H.pop();
if (d[x] >= y){
for (vector< pair<int,int> > :: iterator it = v[x].begin();it!=v[x].end();it++){
vecin = it -> first;
c = it -> second;
if (d[x] + c < d[vecin]){
d[vecin] = d[x] + c;
H.push (make_pair(d[vecin],vecin));
}}}}
ok = 0;
for (i=1;i<=n;i++)
if (d[i] != w[i]){
ok = 1;
break;
}
if (ok == 0)
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}