Pagini recente » Cod sursa (job #472345) | Istoria paginii runda/oji_1/clasament | Istoria paginii runda/aventurile_dariei_si_ale_lui_zeebah/clasament | Cod sursa (job #249606) | Cod sursa (job #2344017)
#include <fstream>
#include <queue>
#include <vector>
#define Nmax 50001
#define inf 999999999
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
vector <pair <int,int> >G[Nmax];
queue <int>q;
bool viz[Nmax];
int T,n,m,x,y,z,i,graf,v[Nmax],start,d[Nmax],Vecin,Cost;
int main()
{f>>T;
for(graf=1;graf<=T;++graf)
{f>>n>>m>>start;
for(i=1;i<=n;++i)
f>>v[i];
for(i=1;i<=m;++i)
{f>>x>>y>>z;
G[x].push_back(make_pair(y,z));
G[y].push_back(make_pair(x,z));
}
for(i=1;i<=n;++i)
{viz[i]=false;
d[i]=inf;}
d[start]=0;
viz[start]=true;
q.push(start);
while(!q.empty())
{x=q.front();
viz[x]=false;
q.pop();
for(unsigned it=0;it<G[x].size();++it)
{Vecin=G[x][it].first;
Cost=G[x][it].second;
if(d[Vecin]>d[x]+Cost)
{d[Vecin]=d[x]+Cost;
if(viz[Vecin]==false)
{q.push(Vecin);
viz[Vecin]=true;
}
}
}
}
for(i=1;i<=n;++i)
if(d[i]!=v[i])
break;
if(i>n)
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
for(i=1;i<=n;++i)
G[i].clear();
}
return 0;
}