Pagini recente » Cod sursa (job #367458) | Cod sursa (job #3169142) | Cod sursa (job #3193426) | Cod sursa (job #3005272) | Cod sursa (job #947314)
Cod sursa(job #947314)
#include<fstream>
#define inf 10001
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
struct muchie
{
long x,y,c;
}q[100001];
long t;
long n,m,s,gasit;
long d[50001];
long v[50001];
int main()
{
long x,y,c;
long ok;
f>>t;
for(long k=1;k<=t;k++)
{
gasit=0;
f>>n>>m>>s;
for(long j=1;j<=n;j++)
f>>v[j];
for(long j=1;j<=m;j++)
{
f>>x>>y>>c;
q[j].x=x;
q[j].y=y;
q[j].c=c;
if(x==s)
d[y]=c;
if(y==s)
d[x]=c;
}
for(long i=1;i<=n;i++)
if(d[i]==0&&i!=s)
d[i]=inf;
do
{
ok=1;
for(long i=1;i<=m;i++)
if(d[q[i].y]>d[q[i].x]+q[i].c)
{
d[q[i].y]=d[q[i].x]+q[i].c;
ok=0;
}
}while(!ok);
/*for(long i=1;i<=n;i++)
g<<d[i]<<" ";
g<<"\n";*/
for(long i=1;i<=n;i++)
if(d[i]!=v[i])
gasit=1;
if(!gasit)
g<<"DA"<<"\n";
else
g<<"NU"<<"\n";
}
return 0;
}