Pagini recente » Cod sursa (job #3208677) | Cod sursa (job #2069386) | Cod sursa (job #178897) | Cod sursa (job #2237136) | Cod sursa (job #3271753)
#include<bits/stdc++.h>
#define pi pair<int, int>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int t,n,m,s,a,b,c,d[50001],x[50001];
vector<pi> v[50001];
priority_queue<pi, vector<pi>, greater<pi> > q;
void dijk(int s) {
for(int i=1;i<=n;++i)
x[i]=1e9;
x[s]=0;
q.push({0,s});
while(!q.empty()) {
pi p=q.top();
if(x[p.second]==p.first)
for(pi i : v[p.second])
if(x[p.second]+i.second<x[i.first]) {
x[i.first]=x[p.second]+i.second;
q.push({x[i.first],i.first});
}
q.pop();
}
}
bool verif() {
for(int i=1;i<=n;++i)
if(d[i]!=x[i]) return 0;
return 1;
}
int main()
{in>>t;
for(int k=1;k<=t;++k) {
in>>n>>m>>s;
for(int i=1;i<=n;++i)
v[i].clear();
for(int i=1;i<=n;++i)
in>>d[i];
for(int i=1;i<=m;++i) {
in>>a>>b>>c;
v[a].push_back({b,c});
v[b].push_back({a,c});
}
dijk(s);
if(verif()) out<<"DA"<<'\n';
else out<<"NU"<<'\n';
}
return 0;
}