Pagini recente » Cod sursa (job #1613021) | smenuri | Cod sursa (job #1488544) | Cod sursa (job #2208973) | Cod sursa (job #1304232)
#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>>distp[i];
dist[i]=inf;
}
for (int i=1;i<=m;i++)
{
f>>x>>y>>z;
v[x].pb(mp(y,z));
v[y].pb(mp(x,z));
}
q.push(s);
dist[s]=0;
while (q.size())
{
int nod=q.front();
q.pop();
for (it=v[nod].begin();it!=v[nod].end();it++)
if (dist[nod]+(*it).second<dist[(*it).first])
{
dist[(*it).first]=dist[nod]+(*it).second;
q.push((*it).first);
}
}
for (int i=1;i<=n;i++)
if (dist[i]!=distp[i])
{
g<<"NU\n";
return;
}
g<<"DA\n";
}
int main()
{
f>>t;
for (int i=1;i<=t;i++)
solve();
f.close();
g.close();
}