Pagini recente » Cod sursa (job #2868147) | Cod sursa (job #1229146) | Cod sursa (job #382613) | Cod sursa (job #455855) | Cod sursa (job #359485)
Cod sursa(job #359485)
#include <fstream>
#include <vector>
using namespace std;
#define Mmax 100001
#define inf 1<<30
int n,m,s,t,x[Mmax],y[Mmax];
long c[Mmax],dx[Mmax/2+1],d[Mmax/2];
ifstream f("distante.in");
ofstream g("distante.out");
void read()
{
int i;
f>>n>>m>>s;
for(i=1;i<=n;i++) { f>>dx[i]; d[i]=inf; }
for(i=1;i<=m;i++)
{
f>>x[i]>>y[i]>>c[i];
if(x[i]==s)
d[y[i]]=c[i];
}
d[s]=0;
}
void solve()
{
bool ok=true;
int i;
while(ok)
{
ok=false;
for(i=1;i<=m;i++)
{
if(d[y[i]]>d[x[i]]+c[i])
{
d[y[i]]=d[x[i]]+c[i];
ok=true;
}
}
}
}
void show()
{
int i;
for(i=1;i<=n;i++)
if(!(d[i]==dx[i]||(dx[i]==0&&d[i]==inf)))
{
g<<"NU\n";
return;
}
g<<"DA\n";
}
int main()
{
f>>t;
while(t)
{
read();
solve();
show();
--t;
}
return 0;
}