Pagini recente » Cod sursa (job #944742) | Cod sursa (job #237459) | Cod sursa (job #629278) | Cod sursa (job #824579) | Cod sursa (job #31055)
Cod sursa(job #31055)
#include<stdio.h>
#include<string.h>
#define inf 32767
int t,n,m,s,c[50001],i,d[50001];
char viz[50001];
struct {int x,y,c;}a[100001];
void dijkstra()
{int i;
for(i=1;i<=n;i++)
d[i]=inf;
d[s]=0;
memset(viz,0,50001);
int min;
for(;;)
{min=inf;
for(i=1;i<=n;i++)
if(d[i]<min&&!viz[i]) {min=d[i]; s=i;}
if(min==inf) return;
viz[s]=1;
for(i=1;i<=m;i++)
if(a[i].x==s)
{if(d[a[i].y]>d[s]+a[i].c) {viz[a[i].y]=0;d[a[i].y]=d[s]+a[i].c;}}
else
if(a[i].y==s)
if(d[a[i].x]>d[s]+a[i].c) {viz[a[i].x]=0;d[a[i].x]=d[s]+a[i].c;}
}}
int ver()
{for(i=1;i<=n;i++)
if(c[i]!=d[i]) return 0;
return 1;}
int main()
{freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(;t;t--)
{scanf("%d %d %d",&n,&m,&s);
for(i=1;i<=n;i++)
scanf("%d",&c[i]);
for(i=1;i<=m;i++)
scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].c);
dijkstra();
if(ver()) printf("DA\n");
else printf("NU\n");}
fclose(stdout);
return 0;}