Pagini recente » Cod sursa (job #1329740) | Cod sursa (job #1160046) | Cod sursa (job #1401693) | Cod sursa (job #1504609) | Cod sursa (job #272606)
Cod sursa(job #272606)
#include <stdio.h>
const long NMAX=50010;
const long MMAX=100010;
long a[MMAX], b[MMAX], dist[NMAX], n, m, s, i;
int c[MMAX], t;
bool corect, gasit[NMAX];
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
scanf("%d", &t);
for (; t; t--)
{
scanf("%ld%ld%ld", &n, &m, &s);
for (i=1; i<=n; i++)
scanf("%ld", &dist[i]);
for (i=1; i<=m; i++)
scanf("%ld%ld%d", &a[i], &b[i], &c[i]);
for (i=1; i<=m; i++)
gasit[i]=0;
if (dist[s]==0)
{
corect=1;
gasit[s]=1;
}//if
else
corect=0;
i=1;
while ((corect)&&(i<=m))
{
if ((dist[a[i]]+c[i])<dist[b[i]])
corect=0;
if ((dist[b[i]]+c[i])<dist[a[i]])
corect=0;
if ((dist[a[i]]+c[i])==dist[b[i]])
gasit[b[i]]=1;
if ((dist[b[i]]+c[i])==dist[a[i]])
gasit[a[i]]=1;
i++;
}//while
i=1;
while ((corect)&&(i<=n))
{
if (!gasit[i])
corect=0;
i++;
}//while
if (corect)
printf("DA\n");
else
printf("NU\n");
}//for i
return 0;
}//main