Pagini recente » Cod sursa (job #1781405) | Cod sursa (job #130884) | Cod sursa (job #2629362) | Cod sursa (job #619500) | Cod sursa (job #284981)
Cod sursa(job #284981)
#include<fstream>
#define max 250000
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
long n,m,d1[50001],d[50001],t,s;
struct muchie { long x,y,c;
} a[200005];
int main()
{ long k,i,cont;
fin>>t;
for(k=1;k<=t;k++)
{ cont=1;
fin>>n>>m>>s;
for(i=1;i<=n;i++)
fin>>d1[i];
for(i=1;i<=m;i++)
{ fin>>a[i].x>>a[i].y>>a[i].c;
a[m+i].x=a[i].y;
a[m+i].y=a[i].x;
a[m+i].c=a[i].c;
if(a[i].x==s) d[a[i].y]=a[i].c;
else if(a[i].y==s) d[a[i].x]=a[i].c;
}
for(i=1;i<=n;i++)
if(d[i]==0) d[i]=max;
d[s]=0;
while(cont)
{ cont=0;
for(i=1;i<=2*m;i++)
if(d[a[i].y]>d[a[i].x]+a[i].c)
{ d[a[i].y]=d[a[i].x]+a[i].c;
cont=1;
}
}
for(i=1;i<=n;i++)
if(d1[i]!=d[i]) { cont=-1;
break;
}
if(cont==-1) fout<<"NU\n";
else fout<<"DA\n";
}
fin.close();
fout.close();
return 0;
}