Pagini recente » Cod sursa (job #403718) | Cod sursa (job #265512) | Profil dianagavrila | Cod sursa (job #1755879) | Cod sursa (job #1750846)
#include <iostream>
#include <cstdio>
#define MAXN 50050
#define DIM 300000
using namespace std;
int t, n, m, s, cursor;
int d[MAXN], ok[MAXN];
char buf[DIM];
char getChar()
{
if (cursor == DIM) {
fread(buf, 1, DIM, stdin);
cursor = 0;
}
return buf[cursor];
}
int getInt()
{
for (char c = getChar(); c < '0' || c > '9'; c = getChar())
cursor++;
int nr = 0;
for (char c = getChar(); c >= '0' && c <= '9'; c = getChar()) {
nr = nr*10 + c - '0';
cursor++;
}
return nr;
}
void citire()
{
n = getInt(); m = getInt(); s = getInt();
for (int i = 1; i <= n; i++)
d[i] = getInt();
}
bool solve()
{
if (d[s] != 0) return 0;
for (int i = 1; i <= n; i++) ok[i] = 0;
ok[s] = 1;
for (int i = 1; i <= m; i++) {
int x = getInt();
int y = getInt();
int c = getInt();
if (d[x] + c == d[y])
ok[y] = 1;
if (d[y] + c == d[x])
ok[x] = 1;
if (d[x] + c < d[y] || d[y] + c < d[x])
return 0;
}
for (int i = 1; i <= n; i++)
if (!ok[i]) return 0;
return 1;
}
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
fread(buf, 1, DIM, stdin);
t = getInt();
while (t--) {
citire();
int rez = solve();
if (rez == 1)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}