Pagini recente » Arhiva de probleme | Cod sursa (job #309164) | Cod sursa (job #479202)
Cod sursa(job #479202)
#include<fstream>
#include<vector>
#include<queue>
#define dmax 50005
#define inf 2147483646
using namespace std;
long n,m,s,distdata[dmax],dist[dmax];
vector<int>v[dmax];
vector<int>c[dmax];
queue<int> q;
void initializare()
{
long i;
for (i=1; i<=n; i++)
dist[i]=inf;
dist[s]=0;
}
void parcurgere()
{
long x,i;
while (q.size())
{
x=q.front();
for (i=0; i<v[x].size(); i++)
if (dist[v[x][i]] > dist[x] + c[x][i])
{
dist[v[x][i]]=dist[x] + c[x][i];
q.push(v[x][i]);
}
q.pop();
}
}
int verificare()
{
long i,ok=0;
for (i=1; i<=n; i++)
if (distdata[i]!=dist[i])
{
ok=1;
break;
}
return ok;
}
void stergere()
{
long i;
for (i=1; i<=n; i++)
{
v[i].clear();
c[i].clear();
}
}
int main()
{
long t,i,j,x,y,z;
ifstream fin("distante.in");
ofstream fout("distante.out");
fin>>t;
for (j=1; j<=t; j++)
{
fin>>n>>m>>s;
for (i=1; i<=n; i++)
fin>>distdata[i];
for (i=1; i<=m; i++)
{
fin>>x>>y>>z;
v[x].push_back(y);
c[x].push_back(z);
v[y].push_back(x);
c[y].push_back(z);
}
q.push(s);
initializare();
parcurgere();
if (verificare()==0)
fout<<"DA"<<'\n'; else
fout<<"NU"<<'\n';
stergere();
}
fin.close();
fout.close();
return 0;
}