Pagini recente » Cod sursa (job #940019) | Cod sursa (job #1511761) | Cod sursa (job #1589038) | Cod sursa (job #1810045) | Cod sursa (job #1502114)
#include<fstream>
#define inf 5000
#define nmax 50005
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
struct cost
{
long x,y,c;
}G[nmax];
long d[nmax],m,n,xi,ver[nmax];
int t;
int main()
{
f>>t;
while(t)
{
t--;
long i,x,y,c,ok;
f>>n>>m>>xi;
for(i=1;i<=n;i++)
d[i]=0;
for(i=1;i<=n;i++)
f>>ver[i];
for(i=1;i<=m;++i)
{
f>>x>>y>>c;
G[i].x=x;
G[i].y=y;
G[i].c=c;
if(x==xi)
d[y]=c;
}
for(i=1;i<=n;++i)
if(i!=xi)
if(d[i]==0)
d[i]=inf;
do
{
ok=1;
for(i=1;i<=m;++i)
if(d[G[i].y]>d[G[i].x]+G[i].c)
{
d[G[i].y]=d[G[i].x]+G[i].c;
ok=0;
}
}while(!ok);
ok=1;
for(i=1;i<=n&&ok==1;++i)
if(d[i]!=ver[i])
ok=0;
if(ok==1)
g<<"DA\n";
else
g<<"NU\n";
/*for(i=1;i<=n;i++)
g<<d[i]<<" ";
g<<"\n";*/
}
return 0;
}