Pagini recente » Cod sursa (job #2033998) | Cod sursa (job #1331117) | Cod sursa (job #249887) | Cod sursa (job #1391434) | Cod sursa (job #2659801)
#include<bits/stdc++.h>
using namespace std;
#define INIT ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
#define int ll
ifstream fin("distante.in"); ofstream fout("distante.out");
#define cin fin
#define cout fout
int t, n, m, s;
int D[50010], d[50010];
bool vr[50010];
vector<pii> g[50010];
bool dijkstra(int s){
bool res=true;
multiset<pii> ms;
d[s]=0;
ms.insert({d[s], s});
while(!ms.empty()){
auto f=(*ms.begin()); ms.erase(ms.begin());
int d0=f.ft, u=f.sc; vr[u]=true; if(d[u]!=D[u]){res=false; break;}
for(auto nd:g[u]){
int c=nd.sc, v=nd.ft;
if(vr[v]){continue;}
if(d[v]==(-1)){
ms.insert({d0+c, v});
d[v]=d0+c;
}
else{
if( (d0+c)<(d[v]) ){
ms.erase(ms.find({d[v], v}));
ms.insert({d0+c, v});
d[v]=d0+c;}
}
}
}
return res;
}
int32_t main(){
INIT
cin>>t;
while(t--){
cin>>n>>m>>s;
for(int i=1; i<=n; i++){cin>>D[i]; d[i]=-1; vr[i]=false;g[i].clear(); }
for(int i=1; i<=m; i++){
int a, b, c; cin>>a>>b>>c; g[a].pb({b, c}); g[b].pb({a, c});
}
bool res=dijkstra(s);
if(res){cout<<"DA\n";}
else{cout<<"NU\n";}
}
return 0;
}