Pagini recente » Cod sursa (job #543223) | Cod sursa (job #1362804) | Cod sursa (job #2044169) | Cod sursa (job #1087181) | Cod sursa (job #484977)
Cod sursa(job #484977)
#include<stdio.h>
struct nod{
int val,cost;
nod *next;}
*v[50505];
int N,M,T,x,y,z,cost[50505],rez,viz[50505],S;
void init()
{
for(int i=1;i<=50;++i)
{
viz[i]=0;
nod* &a=v[i],*b;
while(a!=NULL)
{
b=a->next;
delete a;
// printf("!");
a=b;
if(b!=NULL)
b=b->next;
}
}
}
void add(int a,int b,int co)
{
nod *x = new nod;
x->val=b;
x->cost =co;
x->next=v[a];
v[a]=x;
}
void df(int a,int co)
{viz[a]=co;
for(nod *x=v[a];x!=NULL;x=x->next)
{
if(cost[x->val]>co+x->cost)
{
rez=-1;
return;
}
if(viz[x->val]==0)
if(cost[x->val]==co+x->cost)
df(x->val,cost[x->val]);
}
return;
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&T);
while(T--)
{ init();
rez=1;
scanf("%d%d%d",&N,&M,&S);
for(int i=1;i<=N;++i)
{
scanf("%d",&cost[i]);
}
for(int i=1;i<=M;++i)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
df(S,0);
for(int i=1;i<=N;++i)
if(viz[i]!=cost[i])
rez=-1;
if(rez==1)
printf("DA\n");
else printf("NU\n");
// for(int i=1;i<=N;++i)
// printf("%d ",viz[i]);
}
}