Pagini recente » Cod sursa (job #1131355) | Cod sursa (job #1649919) | Cod sursa (job #2404615) | Cod sursa (job #2451159) | Cod sursa (job #886206)
Cod sursa(job #886206)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
vector <int> a[50001],b[50001];
int n,i, x,y,z,e,l,k,m,c[50001],t,s;
bool ok;
bool verif1()
{
int j;
for(j=0;j<a[i].size();j++)
{
y=a[i][j];
if(c[i]>c[y]+b[i][j]) return false;
}
return true;
}
bool verif2()
{
int j;
bool ok1;
ok1=true;
if(i==s) return true;
for(j=0;j<a[i].size();j++)
{
y=a[i][j];
if(c[i]==c[y]+b[i][j]) ok1=false;
}
if (ok1==false) return true;
return false;
}
int main()
{
in>>t;
for(e=1;e<=t;e++)
{
in>>n>>m>>s;
for(i=1;i<=n;i++)
{
a[i].clear();
b[i].clear();
}
l=1; k=1; ok=true;
for(i=1;i<=n;i++)
{
in>>c[i];
}
for(i=1;i<=m;i++)
{
in>>x>>y>>z;
a[x].push_back(y);
a[y].push_back(x);
b[x].push_back(z);
b[y].push_back(z);
}
for(i=1;i<=n;i++)
{
if(verif1()!=true&&verif2()!=true) ok=false;
}
if(ok==true) out<<"DA";
else out<<"NU";
}
return 0;
}