Pagini recente » Cod sursa (job #3356498) | Cod sursa (job #88216) | Cod sursa (job #1497145) | Cod sursa (job #1072018) | Cod sursa (job #3355099)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int main() {
int t, n, m, s;
fin>>t;
for (int i = 0; i < t; i++) {
fin>>n>>m>>s;
vector<int>ans(n + 1, 0);
for (int j = 1; j <= n; j++) {
fin>>ans[j];
}
vector<vector<pair<int, int>>>adj(n + 1);
for (int j = 0; j < m; j++) {
int x, y, c;
fin>>x>>y>>c;
adj[x].push_back({y, c});
adj[y].push_back({x, c});
}
priority_queue<
pair<int, int>,
vector<pair<int, int>>,
greater<pair<int, int>>
>pq;
pq.push({0, s});
vector<int>dist(n + 1, 1e9);
dist[s] = 0;
while(!pq.empty()) {
auto [cost, node] = pq.top();
pq.pop();
for (pair<int, int> vecin : adj[node]) {
int v = vecin.first;
int c = vecin.second;
if (dist[v] > cost + c) {
dist[v] = cost + c;
pq.push({dist[v], v});
}
}
}
int ok = 0;
for (int i = 1; i <= n; i++) {
if (dist[i] != ans[i]) {
ok = 1;
break;
}
}
if (ok == 0) {
fout<<"DA\n";
} else {
fout<<"NU\n";
}
}
return 0;
}