Pagini recente » Cod sursa (job #1572478) | Cod sursa (job #3138413) | Cod sursa (job #2748586) | Cod sursa (job #959497) | Cod sursa (job #477013)
Cod sursa(job #477013)
#include <stdio.h>
#include <string.h>
int n, m, s, ok, d[50002], viz[50002];
inline void verif (int x, int y, int c)
{
if (d[x] + c < d[y])
ok = 0;
else
if (d[x] + c == d[y])
viz[y] = 1;
}
int main ()
{
freopen ("distante.in", "r", stdin);
freopen ("distante.out", "w", stdout);
int t, i, x, y, c;
scanf ("%d", &t);
while (t --)
{
memset(viz, 0, sizeof (viz));
ok = 1;
scanf ("%d %d %d", &n, &m, &s);
for (i = 1; i <= n; i ++)
scanf ("%d", &d[i]);
for (i = 1; i <= m; i ++)
{
scanf ("%d %d %d", &x, &y, &c);
verif (x, y, c);
verif (y, x, c);
}
for (i = 1; i <= n; i ++)
if (i != s && !viz[i])
{
ok = 0;
break;
}
printf ("%s\n", ok ? "DA" : "NU");
}
return 0;
}