Pagini recente » Cod sursa (job #2968172) | Cod sursa (job #2634604) | Cod sursa (job #2255946) | Cod sursa (job #1029635) | Cod sursa (job #1651297)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef pair<int, int> pii;
const int Nmax = 50444;
vector<pii> G[Nmax];
int d[Nmax];
int main() {
ifstream fin ("distante.in");
ofstream fout ("distante.out");
int T, N, M, s, a, b, c;
fin >> T;
while(T--) {
fin >> N >> M >> s;
--s;
for (int i = 0; i < N; ++i) {
G[i].clear();
}
for (int i = 0; i < N; ++i)
fin >> d[i];
for (int i = 0; i < M; ++i) {
fin >> a >> b >> c;
--a, --b;
G[a].push_back({b, c});
G[b].push_back({a, c});
}
if (d[s] != 0) {
fout << "NU" << endl;
continue;
};
bool ok = true;
for (int x = 0; x < N && ok; ++x) {
if (x == s)
continue;
bool reach = false;
for(pii P: G[x]) {
if (d[x] > d[P.first] + P.second) {
ok = false;
break;
} else if (d[x] == d[P.first] + P.second) {
reach = true;
}
}
if (!reach)
ok = false;
}
fout << (ok ? "DA" : "NU") << '\n';
}
return 0;
}