Pagini recente » Cod sursa (job #2262524) | Cod sursa (job #2534531) | Cod sursa (job #106355) | Cod sursa (job #2697405) | Cod sursa (job #2659799)
#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];
void dijkstra(int s){
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;
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{
ms.erase(ms.find({d[v], v}));
ms.insert({min(d0+c, d[v]), v});
d[v]=min(d[v], d0+c);
}
}
}
}
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});
}
dijkstra(s);
bool res=true;
for(int i=1; i<=n; i++){
//cout<<d[i]<<" ";
if(d[i]!=D[i]){
res=false; break;
}
}
if(res){cout<<"DA\n";}
else{cout<<"NU\n";}
}
return 0;
}