Pagini recente » Cod sursa (job #1364611) | Cod sursa (job #1358692) | Cod sursa (job #1634665) | Cod sursa (job #1494019) | Cod sursa (job #1502116)
#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].x]>d[G[i].y]+G[i].c)
{
if(d[G[i].x]+G[i].c<d[G[i].y]+G[i].c)
d[G[i].y]=min(d[G[i].x]+G[i].c,d[G[i].y]+G[i].c);
else
d[G[i].x]=min(d[G[i].x]+G[i].c,d[G[i].y]+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;
}