Pagini recente » Cod sursa (job #2605958) | Cod sursa (job #732651) | Cod sursa (job #2241253) | Cod sursa (job #2703438) | Cod sursa (job #1427678)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
static const int MAXN = 50009;
int dzt[MAXN];
bool u[MAXN];
bool check(int s, int n) {
if(dzt[s] != 0) return false;
for(int i = 0; i < n; i++) {
if(!u[i]) return false;
}
return true;
}
int main() {
int t;
FILE *f = fopen("distante.in", "rt");
FILE *g = fopen("distante.out", "wt");
fscanf(f, "%d", &t);
for(int i = 0; i < t; i++) {
int n, m, s, a, b, c;
fscanf(f, "%d%d%d", &n, &m, &s);
s--;
for(int j = 0; j < n; j++) {
fscanf(f, "%d", &dzt[j]);
}
bool are_equal = true;
memset(u, 0, sizeof(u));
for(int j = 0; j < m; j++) {
fscanf(f, "%d%d%d", &a, &b, &c);
a--; b--;
if(dzt[a] + c == dzt[b]) u[b] = true;
if(dzt[b] + c == dzt[a]) u[a] = true;
if(dzt[a] + c < dzt[b] || dzt[b] + c < dzt[a]) are_equal = false;
}
if(are_equal) are_equal = check(s, n);
if(are_equal) {
fprintf(g, "DA\n");
}
else {
fprintf(g, "NU\n");
}
}
fclose(f);
fclose(g);
return 0;
}