Pagini recente » Cod sursa (job #1764560) | Cod sursa (job #1105896) | Cod sursa (job #1586657) | Cod sursa (job #3286238) | Cod sursa (job #1547648)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define MAX_N 50000
ifstream fin("distante.in");
ofstream fout("distante.out");
int T, N, M, S;
int D[MAX_N];
bool verif() {
fin >> N >> M >> S;
vector<bool> v(N, false);
S--;
for (int i = 0; i < N; i++)
fin >> D[i];
bool bad = false;
if (D[S] != 0)
bad = true;
else
v[S] = true;
for (int i = 0; i < M; i++) {
int x, y, z;
fin >> x >> y >> z;
x--; y--;
if (bad)
continue;
if (D[x] + z < D[y])
bad = true;
if (D[y] + z < D[x])
bad = true;
if (D[x] + z == D[y])
v[y] = true;
if (D[y] + z == D[x])
v[x] = true;
}
if (bad)
return false;
for (int i = 0; i < N; i++)
if (!v[i])
return false;
return true;
}
int main() {
fin >> T;
for (int i = 0; i < T; i++)
fout << (verif() ? "DA\n" : "NU\n");
}