Pagini recente » Cod sursa (job #111956) | Cod sursa (job #2002670) | Cod sursa (job #2817840) | Arhiva de probleme | Cod sursa (job #451552)
Cod sursa(job #451552)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 50000
int *d, *gasit;
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
int t;
scanf("%d", &t);
int n, m, s, i, x, y, c, rez;
while(t--)
{
scanf("%d%d%d", &n, &m, &s);
d = (int*)calloc(n + 1, sizeof(int));
gasit = (int*)calloc(n + 1, sizeof(int));
gasit[s] = 1;
rez = 1;
for(i = 1; i <= n; ++i) scanf("%d", &d[i]);
gasit[s] = 1;
if(d[s] != 0) rez = 0;
for(i = 1; i <= m; ++i)
{
scanf("%d%d%d", &x, &y, &c);
// incerc sa fac o relaxare folosind aceasta muchie
if(d[y] > d[x] + c) rez = 0;
if(!gasit[y]) if(d[y] == d[x] + c) gasit[y] = 1;
}
for(i = 1; i <= n && rez == 1; ++i) if(!gasit[i]) rez = 0;
if(rez) printf("DA\n");
else printf("NU\n");
free(d);
free(gasit);
}
return 0;
}