Pagini recente » Cod sursa (job #1577543) | Cod sursa (job #1109364) | Cod sursa (job #2954554) | Cod sursa (job #1623799) | Cod sursa (job #175555)
Cod sursa(job #175555)
#include <cstdio>
#include <cstring>
using namespace std;
#define FIN "distante.in"
#define FOUT "distante.out"
#define MAX_N 50005
typedef struct NOD
{
int nod;
NOD *next;
};
NOD *A[MAX_N];
int D[MAX_N];
int P[MAX_N];
int N, M, S;
void solve ()
{
int x, y, c, i;
int afisat = 0;
scanf ("%d %d %d", &N, &M, &S);
for (i = 1; i <= N; ++i) scanf ("%d", D + i);
if (D[S]) printf ("NU\n"), afisat = 1;
int ok = 1;
memset (P, 0, sizeof (P));
P[S] = 1;
for (i = 1; i <= M; ++i)
{
scanf ("%d %d %d", &x, &y, &c);
if (D[x] + c < D[y]) ok = 0;
if (D[y] + c < D[x]) ok = 0;
if (D[x] + c == D[y]) ++P[y];
if (D[y] + c == D[x]) ++P[x];
}
for (i = 1; i <= N; ++i)
if (!P[i]) ok = 0;
if (!afisat)
if (ok) printf ("DA\n"); else printf ("NU");
}
int main ()
{
freopen (FIN, "r", stdin);
freopen (FOUT, "w", stdout);
int T;
scanf ("%d", &T);
while (T--)
solve ();
return 0;
}