Pagini recente » Cod sursa (job #2141069) | Cod sursa (job #562355) | Cod sursa (job #2581938) | Profil gamergod | Cod sursa (job #2779372)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int dim=500009,inf=1e18;
struct elem{
int y,c;
bool operator <(const elem a) const
{
return c>a.c;
}
};
vector<elem>v[dim];
priority_queue<elem>q;
int n,m,start,ans[dim];
int d[dim];
void Dijkstra(int start){
for(int i=1;i<=n;i++){
d[i]=inf;
}
d[start]=0;
q.push({start,0});
while(!q.empty()){
int x=q.top().y;
int c=q.top().c;
q.pop();
if(c==d[x]){
for(auto nod:v[x]){
int y=nod.y;
int cost=nod.c;
if(d[y]>d[x]+cost){
d[y]=d[x]+cost;
q.push({y,d[y]});
}
}
}
}
}
void solve(){
fin>>n>>m>>start;
for(int i=1;i<=n;i++){
fin>>ans[i];
}
for(int i=1;i<=m;i++){
int x,y,c;
fin>>x>>y>>c;
v[x].push_back({y,c});
v[y].push_back({x,c});
}
Dijkstra(start);
for(int i=1;i<=n;i++){
if(d[i]!=ans[i]){
fout<<"NU";
return;
}
}
fout<<"DA";
}
signed main(){
int t=1;
fin>>t;
while(t--){
solve();
fout<<'\n';
}
}