Pagini recente » Cod sursa (job #2401399) | Cod sursa (job #2586563) | Cod sursa (job #2159721) | Cod sursa (job #3193894) | Cod sursa (job #2129494)
#include <fstream>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int MAXN = 50005;
int teste;
int main() {
fin >> teste;
for (int test = 1; test <= teste; ++test) {
int n, m, c;
fin >> n >> m >> c;
int a[MAXN], s[MAXN];
for (int i = 1; i <= n; ++i) {
fin >> a[i];
s[i] = 0;
}
vector< pair<int, int> > v[MAXN];
for (int i = 1; i <= m; ++i) {
int a, b, c;
fin >> a >> b >> c;
v[a].push_back(make_pair(b, c));
v[b].push_back(make_pair(a, c));
}
queue<int> q;
q.push(c);
while(!q.empty()) {
int k = q.front();
for (int i = 0; i < v[k].size(); ++i) {
pair<int, int> p = v[k][i];
if (s[p.first] == 0 || s[p.first] > s[k] + p.second) {
s[p.first] = s[k] + p.second;
q.push(p.first);
}
}
q.pop();
}
s[c] = 0;
string ok = "DA";
for (int i = 1; i <= n; ++i) {
if (s[i] != a[i]) {
ok = "NU";
i = n + 10;
}
}
fout << ok << '\n';
}
fout.close();
return 0;
}