Pagini recente » Cod sursa (job #2737094) | Cod sursa (job #908831) | Cod sursa (job #1602496) | Cod sursa (job #3330363) | Cod sursa (job #3353854)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream cin("distante.in");
ofstream cout("distante.out");
int t;
cin >> t;
for(int rb=1;rb<=t;rb++){
int n,m,s;
cin >> n >> m >> s;
vector<int>d,d1;
d1.resize(n+2);
d.resize(n+2);
vector<vector<pair<int,int>>>L;
L.resize(m+2);
for(int i=1;i<=n;i++){
cin >> d1[i];
}
for(int i=1;i<=m;i++){
int x,y,c;
cin >> x >> y >> c;
L[x].push_back({y,c});
L[y].push_back({x,c});
}
for(int i=1;i<=n;i++)d[i]=1e9;
d[s]=0;
priority_queue<pair<int,int>>q;
q.push({0,s});
while(!q.empty()){
int x=q.top().second;
q.pop();
for(auto it:L[x]){
int ncost=it.second;
int nx=it.first;
if(abs(d[nx])>abs(d[x])+ncost){
d[nx]=d[x]+ncost;
q.push({-d[nx],nx});
}
}
}
int ok=0;
for(int i=1;i<=n;i++){
if(d1[i]!=d[i]){ok=1;break;}
}
if(ok==0)cout << "DA" << '\n';
else cout << "NU" << '\n';
}
return 0;
}