Pagini recente » oji_bv_11-12_2025 | Rating Hagiu Bogdan (bodyas) | Istoria paginii runda/emagcluj_9_2016_3/clasament | Cod sursa (job #1643811) | Cod sursa (job #2698687)
#include <bits/stdc++.h>
#define fx first
#define sx second
#define pb push_back
typedef long long ll;
const int Max = 50006;
const int Inf = 2e9;
const int MOD = 666013;
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int n, m, start, x, y, z, aux[Max], viz[Max], dist[Max];
vector < pair<int,int> > v[Max];
void dijkstra (int st) {
dist[st] = 0; viz[st] = 0;
for (int i=1; i<=n; i++) {
if (i == st) continue;
dist[i] = Inf;
viz[i] = 0;
}
priority_queue < pair<int,int> > q;
q.push({0, st});
while (q.size()) {
int node = q.top().sx;
q.pop();
if (viz[node]) continue;
viz[node] = 1;
for (int i=0; i<v[node].size(); i++) {
int next = v[node][i].fx, w = v[node][i].sx;
if (dist[node] + w < dist[next]) {
dist[next] = dist[node] + w;
q.push({-dist[next], next});
}
}
}
return;
}
void solve () {
in >> n >> m >> start;
for (int i=1; i<=n; i++) in >> aux[i], v[i].clear();
while (m--) {
in >> x >> y >> z;
v[x].pb({y, z});
v[y].pb({x, z});
}
dijkstra(start);
bool ans = true;
for (int i=1; i<=n; i++) if (aux[i] != dist[i]) {
ans = false;
break;
}
(ans == true) ? out << "DA\n" : out << "NU\n";
return;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
in >> t;
while (t--) {
solve ();
}
return 0;
}