Pagini recente » Cod sursa (job #1938043) | Cod sursa (job #2612134) | Cod sursa (job #1041217) | Cod sursa (job #1160592) | Cod sursa (job #3155144)
#include <bits/stdc++.h>
#define L 50005
#define INF 1000000001
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int t;
int n, m, s;
int distMin[L], dist[L];
vector <pair <int, int>> G[L];
void init() {
for (int i = 0; i <= n; i++)
G[i].clear();
}
void dijkstra() {
priority_queue <pair <int, int>> pq;
for (int i = 1; i <= n; i++)
dist[i] = INF;
dist[s] = 0;
pq.push({-dist[s], s});
while (!pq.empty()) {
int cost = - pq.top().first;
int node = pq.top().second;
pq.pop();
if (dist[node] != cost)
continue;
for (auto it : G[node])
if (dist[it.first] > cost + it.second) {
dist[it.first] = cost + it.second;
pq.push({-dist[it.first], it.first});
}
}
}
void solve() {
fin >> n >> m >> s;
init();
for (int i = 1; i <= n; i++)
fin >> distMin[i];
for (int i = 1; i <= m; i++) {
int a, b, c;
fin >> a >> b >> c;
G[a].push_back({b, c});
G[b].push_back({a, c});
}
dijkstra();
bool ans = true;
for (int i = 1; i <= n; i++)
if (distMin[i] != dist[i])
ans = false;
if (ans)
fout << "DA\n";
else
fout << "NU\n";
}
int main() {
for (fin >> t; t; t--)
solve();
return 0;
}