Pagini recente » Cod sursa (job #1745133) | Cod sursa (job #1692070) | Cod sursa (job #1546451) | Cod sursa (job #1543337) | Cod sursa (job #2875325)
#include <fstream>
#include <vector>
#include <queue>
#define INF 100000001
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int d[50011],D[50011],s;
bool inq[50011];
vector <pair<int,int>> v[50011];
void bellman_ford()
{
queue <int> q;
q.push(s);
inq[s]=1;
while(q.empty()==false)
{
int k=q.front();
q.pop();
inq[k]=0;
for(int i=0;i<v[k].size();i++)
if(d[v[k][i].first]>d[k]+v[k][i].second)
{
d[v[k][i].first]=d[k]+v[k][i].second;
if(d[v[k][i].first]<D[v[k][i].first])
return;
if(inq[v[k][i].first]==0)
{
inq[v[k][i].first]=1;
q.push(v[k][i].first);
}
}
}
}
int T,t,i,n,m,x,y,z;
int main()
{
f>>T;
for(t=1;t<=T;t++)
{
f>>n>>m>>s;
for(i=1;i<=n;i++)
{
v[i].clear();
d[i]=INF;
inq[i]=0;
f>>D[i];
}
d[s]=0;
for(i=1;i<=m;i++)
{
f>>x>>y>>z;
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
bellman_ford();
for(i=1;i<=n;i++)
if(d[i]!=D[i])
{
g<<"NU"<<'\n';
i=n+1;
}
if(i!=n+2)
g<<"DA"<<'\n';
}
return 0;
}