Pagini recente » Cod sursa (job #1832451) | Cod sursa (job #1513403) | Monitorul de evaluare | Cod sursa (job #1764946) | Cod sursa (job #252302)
Cod sursa(job #252302)
#include<stdio.h>
const int Nmax=50010;
long i,viz[Nmax],n,m,d[Nmax],s;
int t,gasit,qw;
struct coada
{
long inf;
coada *urm;
}*c,*ultim;
struct elem
{
long inf;
int cost;
elem *urm;
}*a[Nmax];
void citire()
{
long x,y,co,i;
elem *p;
scanf("%ld%ld%s",&n,&m,&s);
for(i=1;i<=n;i++)
scanf("%ld",&d[i]);
for(i=0;i<m;i++)
{
scanf("%ld%ld%ld",&x,&y,&co);
p=new elem;
p->inf=y;
p->cost=co;
p->urm=a[x];
a[x]=p;
p=new elem;
p->inf=x;
p->cost=co;
p->urm=a[y];
a[y]=p;
}
}
void init()
{
for(int i=1;i<Nmax;i++)
{
a[i]->urm=NULL;
a[i]=NULL;
}
}
int main()
{
elem *p;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(int qw=0;qw<t;qw++)
{
init();
citire();
gasit=0;
for(i=1;i<=n && !gasit;i++)
{
if(i==s)
{
if( d[i]!=0)
{
printf("NU\n");
gasit=1;
}
}
else
{
p=a[i];
while(a[i]!=NULL && !gasit)
{
if(a[i]->inf==s)
{
if(a[i]->cost<d[i])
{
a[i]=p;
printf("NU\n");
gasit=1;
}
}
else
if(d[i]>d[a[i]->inf]+a[i]->cost)
{
a[i]=p;
printf("NU\n");
gasit=1;
}
a[i]=a[i]->urm;
}
a[i]=p;
}
}
if(gasit==0)
printf("DA\n");
}
fclose(stdin);
fclose(stdout);
return 0;
}