Pagini recente » Cod sursa (job #1418116) | Cod sursa (job #250745) | Cod sursa (job #2424365) | Cod sursa (job #560362) | Cod sursa (job #1232403)
#include <iostream>
#include <cstdio>
#include <vector>
#define in "distante.in","r",stdin
#define out "distante.out","w",stdout
#define nmax 50009
using namespace std;
int Q[nmax],sol[nmax],n,m,xi,t,s1[nmax];
vector<pair<int,int> > G[nmax];
inline void solve(){
int i,j,k;
k = 1;
Q[1] = xi;
for(i=1;i<=n;i++)
sol[i]=-1;
sol[xi] = 0;
for(i=1;i<=k;i++)
for(j=0;j<G[Q[i]].size();j++)
if(sol[G[Q[i]][j].first] == -1 || sol[G[Q[i]][j].first] > sol[Q[i]] + G[Q[i]][j].second){
Q[++k] = G[Q[i]][j].first;
sol[G[Q[i]][j].first]= sol[Q[i]] + G[Q[i]][j].second;
}
k=0;
for(i=1;i<=n&&!k;i++){ if(sol[i] == -1) sol[i]=0;
if(sol[i]!=s1[i])k=1;}
if(k) cout <<"NU\n";
else cout <<"DA\n";
}
inline void Read(){
int i,x,y,c;
freopen(in);
freopen(out);
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&xi);
for(i=1;i<=n;i++)
scanf("%d",&s1[i]);
while(m--){
scanf("%d%d%d",&x,&y,&c);
G[x].push_back(make_pair(y,c));
G[y].push_back(make_pair(x,c));
}
solve();
}
}
int main(){
Read();
return 0;
}