Pagini recente » Cod sursa (job #3188303) | Cod sursa (job #572663) | Cod sursa (job #2125973) | Cod sursa (job #2373854) | Cod sursa (job #2971757)
#include <bits/stdc++.h>
#define INF 100000000
#define pii pair<int, int>
#define MAX 50002
using namespace std;
int T,n,m,nod,x,y,c,a[MAX],d[MAX];
vector<pii> v[MAX];
ifstream fin("distante.in");
ofstream fout("distante.out");
void solve(){
fin >> n >> m >> nod;
for(int i = 1; i <= n; i++){
fin >> a[i];
}
set<pii> s;
while(m--){
fin >> x >> y >> c;
v[x].push_back({y, c});
v[y].push_back({x, c});
}
for(int i = 1; i <= n; i++){
d[i] = INF;
}
s.insert({0, nod});
d[nod] = 0;
while(!s.empty()){
int nod = (*s.begin()).second;
s.erase(s.begin());
for(auto [vecin, cost]: v[nod]){
if(d[vecin] > cost+d[nod]){
s.erase({d[vecin], vecin});
d[vecin] = cost+d[nod];
s.insert({d[vecin], vecin});
}
}
}
bool ok = true;
for(int i = 1; i <= n; i++){
v[i].clear();
ok &= (d[i] == a[i]);
}
fout << (ok ? "DA" : "NU") << "\n";
}
int main()
{
fin >> T;
while(T--){
solve();
}
return 0;
}