Pagini recente » Cod sursa (job #636536) | Cod sursa (job #880663) | Cod sursa (job #2554129) | Cod sursa (job #989277) | Cod sursa (job #1304239)
#include <fstream>
#include <queue>
#include <vector>
#define lmax 50005
#define inf 5000000
#define pb push_back
#define mp make_pair
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int t,n,m,s,x,y,z;
int dist[lmax],distp[lmax];
queue <int>q;
inline void solve()
{
vector <pair<int,int> >v[lmax];
vector <pair<int,int> >::iterator it;
f>>n>>m>>s;
for (int i=1;i<=n;i++)
f>>dist[i];
for (int i=1;i<=m;i++)
{
f>>x>>y>>z;
v[x].pb(mp(y,z));
v[y].pb(mp(x,z));
}
for (int i=1;i<=n;i++)
{
int val=inf;
for (it=v[i].begin();it!=v[i].end();it++)
if (dist[(*it).first]+(*it).second<val)
{
val=dist[(*it).first]+(*it).second;
if (val<dist[i])
{
g<<"NU\n";
return;
}
}
if (dist[i]!=val && i!=s)
{
g<<"NU\n";
return;
}
}
g<<"DA\n";
}
int main()
{
f>>t;
for (int i=1;i<=t;i++)
solve();
f.close();
g.close();
}