Pagini recente » Cod sursa (job #2219914) | Cod sursa (job #173714) | Cod sursa (job #583208) | Clasament statia1a | Cod sursa (job #2425366)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
vector <vector <pair <int, int> > > v(50001);
vector <int> d(50001);
void check(int n, int m, int s) {
bool gasit;
for (int i = 1; i <= n; i++) {
if (i == s) {
if (d[i] != 0) {
out << "NU\n";
return;
}
}
else {
gasit = false;
for (auto muchie : v[i]) {
if (d[i] > d[muchie.second] + muchie.first) {
out << "NU\n";
return;
}
// if (d[i] == d[muchie.second] + muchie.first)
// gasit = true;
}
//if (!gasit) {
// out << "NU\n";
//return;
//}
}
}
out << "DA\n";
}
int main() {
int t, n, m, s;
int a, b, c;
in >> t;
for (int i = 0; i < t; i++) {
in >> n >> m >> s;
for (int j = 1; j <= n; j++)
in >> d[j];
for (int j = 0; j < m; j++) {
in >> a >> b >> c;
v[a].push_back({c, b});
v[b].push_back({c, a});
}
check(n, m, s);
for (int i = 1; i <= n; i++)
v[i].clear();
}
return 0;
}