Pagini recente » Cod sursa (job #926097) | Cod sursa (job #699185) | Cod sursa (job #1673918) | Cod sursa (job #1024161) | Cod sursa (job #330276)
Cod sursa(job #330276)
#include <cstdio>
#include <vector>
#define maxn 50100
using namespace std;
int t, n, i, j, m, s, a, b, c, fiu;
vector <int> v[maxn], cs[maxn];
bool ok[maxn], bine;
int dist[maxn];
int main() {
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
scanf("%d", &t);
for (; t > 0; t--) {
scanf("%d%d%d", &n, &m, &s);
// fprintf(stderr, "%d\n", t);
for (i = 1; i <= n; i++) {
scanf("%d", &dist[i]);
ok[i] = false;
v[i].clear();
cs[i].clear();
}
ok[s] = (dist[s] == 0);
for (i = 1; i <= m; i++) {
scanf("%d%d%d", &a, &b, &c);
v[a].push_back(b);
cs[a].push_back(c);
v[b].push_back(a);
cs[b].push_back(c);
}
for (i = 1; i <= n; i++)
for (j = 0; j < v[i].size(); j++) {
fiu = v[i][j];
if (dist[fiu] == dist[i] + cs[i][j])
ok[fiu] = true;
}
bine = true;
for (i = 1; i <= n; i++)
bine = (bine && ok[i]);
if (bine)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}