Pagini recente » Cod sursa (job #1290535) | Cod sursa (job #3351797) | Cod sursa (job #2323741) | Cod sursa (job #3299494) | Cod sursa (job #3354650)
#include <bits/stdc++.h>
using namespace std;
int main() {
ifstream f("distante.in");
ofstream g("distante.out");
int t;
f >> t;
const long long INF = (long long)1e18;
while (t--) {
int n, m, src;
f >> n >> m >> src;
vector<long long> initial(n + 1);
for (int i = 1; i <= n; i++) {
f >> initial[i];
}
vector<tuple<int, int, int>> edges;
for (int i = 0; i < m; i++) {
int x, y, cost;
f >> x >> y >> cost;
edges.push_back({x, y, cost});
edges.push_back({y, x, cost});
}
vector<long long> dist(n + 1, INF);
dist[src] = 0;
for (int i = 1; i <= n - 1; i++) {
for (auto &e : edges) {
int u, v, cost;
tie(u, v, cost) = e;
if (dist[u] != INF && dist[u] + cost < dist[v]) {
dist[v] = dist[u] + cost;
}
}
}
bool ok = true;
for (int i = 1; i <= n; i++) {
if (dist[i] != initial[i]) {
ok = false;
break;
}
}
if (!ok) g << "NU\n";
else g << "DA\n";
}
return 0;
}