Pagini recente » Cod sursa (job #3217387) | Cod sursa (job #1273360) | Cod sursa (job #1830460) | Cod sursa (job #1703725) | Cod sursa (job #3132126)
#include <bits/stdc++.h>
using namespace std;
void dijkstra(vector<vector<pair<int, int>>> adj, vector<int> &dist, int source)
{
vector<bool> visited(adj.size(), false);
priority_queue<pair<int, int>> pq;
pq.push({0, source});
dist[source] = 0;
while (!pq.empty()) {
pair<int, int> x = pq.top();
pq.pop();
if (visited[x.second])
continue;
visited[x.second] = true;
for (auto y : adj[x.second]) {
if (dist[y.first] > dist[x.second] + y.second) {
dist[y.first] = dist[x.second] + y.second;
if (!visited[y.first])
pq.push({dist[y.first], y.first});
}
}
}
}
void solve()
{
int n, m, k;
cin >> n >> m >> k;
vector<int> v(n + 1);
for (int i = 1; i <= n; ++i)
cin >> v[i];
vector<vector<pair<int, int>>> adj(n + 1, vector<pair<int, int>>());
for (int i = 0; i < m; ++i) {
int x, y, c;
cin >> x >> y >> c;
adj[x].push_back({y, c});
adj[y].push_back({x, c});
}
vector<int> dist(n + 1, INT_MAX);
dijkstra(adj, dist, 1);
bool same = true;
for (int i = 1; i <= n; ++i)
if (v[i] != dist[i])
same = false;
if (same) {
cout << "DA\n";
return;
}
cout << "NU\n";
}
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
int t;
cin >> t;
for (int i = 0; i < t; ++i)
solve();
return 0;
}