Pagini recente » Cod sursa (job #1636608) | Cod sursa (job #1112409) | Cod sursa (job #2897481) | Cod sursa (job #1268507) | Cod sursa (job #1367298)
#include <fstream>
# define nmax 50002
# define mmax 100002
# define inf 20000000
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int n,m,t,s;
struct muchie {int x,y,c;};
muchie G[mmax];
int D[nmax],Dr[nmax];
int main()
{f>>t;
int i,ok;
while(t)
{for(i=1;i<=n;++i) D[i]=0;
ok=0;
f>>n>>m>>s;
for(i=1;i<=n;++i) f>>Dr[i];
for(i=1;i<=m;++i)
{
f>>G[i].x>>G[i].y>>G[i].c;
if(G[i].x==s) D[G[i].y]=G[i].c;
}
for(i=1;i<=n;++i)
{
if(D[i]==0 && i!=s) D[i]=inf;
}
while(ok==0)
{
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;
}
if(D[G[i].x]>D[G[i].y]+G[i].c)
{
D[G[i].x]=D[G[i].y]+G[i].c;
ok=0;
}
}
}
ok=0;
for(i=1;i<=n;++i)
if(D[i]!=Dr[i]) {ok=1 ; i=n+1;}
if(ok==0) g<<"DA";
else g<<"NU";
if(t>1) g<<"\n";
--t;
}
return 0;
}