Pagini recente » Cod sursa (job #575573) | Cod sursa (job #2367283) | Cod sursa (job #1010005) | Cod sursa (job #237806) | Cod sursa (job #326202)
Cod sursa(job #326202)
#include <stdio.h>
#define DIM 50005
struct nod {int x,c;
nod *urm;} *lst[DIM];
int dis[DIM],viz[DIM];
int t,n,m,v,s;
void clean ()
{
nod *p,*q;
int i;
v=0;
for (i=1; i<=n; ++i)
{
for (p=lst[i]; p; p=q)
{
q=p->urm;
delete p;
}
lst[i]=NULL;
viz[i]=0;
}
}
void add (int srs,int dst, int cst)
{
nod *p=new nod;
p->x=dst;
p->c=cst;
p->urm=lst[srs];
lst[srs]=p;
}
void read ()
{
int i,x,y,ct;
scanf ("%d%d%d",&n,&m,&s);
for (i=1; i<=n; ++i)
scanf ("%d",&dis[i]);
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d",&x,&y,&ct);
add (x,y,ct);
add (y,x,ct);
}
}
void distante (int srs)
{
nod *p;
viz[srs]=++v;
for (p=lst[srs]; p; p=p->urm)
if ((dis[srs]+p->c==dis[p->x]) && !viz[p->x])
distante (p->x);
}
void solve ()
{
int i;
distante (s);
if (v==n)
printf ("DA\n");
else
printf ("NU\n");
}
int main ()
{
freopen ("distante.in","r",stdin);
freopen ("distante.out","w",stdout);
int i;
scanf ("%d",&t);
for (i=1; i<=t; ++i)
{
clean ();
read ();
solve ();
}
return 0;
}