Pagini recente » Cod sursa (job #1542302) | Cod sursa (job #1951428) | Cod sursa (job #2542931) | Cod sursa (job #3211739) | Cod sursa (job #2275826)
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int mini[50002],verif[50002];
vector <pair <int,int> > v[50001];
priority_queue <pair <int,int> ,vector <pair <int,int> > ,greater <pair <int,int> > > h;
int t,n,m,inceput,i,j,x,y,cost,nod,sel[50005],c,ok1;
int main()
{
f>>t;
for (int yyi=1;yyi<=t;yyi++)
{
f>>n>>m>>inceput;
for (j=1;j<=n;j++)
{
f>>verif[j];
}
for (i=1;i<=m;i++)
{
f>>x>>y>>cost;
v[x].push_back({y,cost});
v[y].push_back({x,cost});
}
for (j=1;j<=n;j++)
{
mini[j]=-1;
}
mini[inceput]=0;
for (i=0;i<v[inceput].size();i++)
{
nod=v[inceput][i].first;
mini[nod]=v[inceput][i].second;
h.push({v[inceput][i].second,nod});
}
sel[inceput]=1;
for (i=1;i<n;i++)
{
while (sel[h.top().second]==1)
{
h.pop();
}
c=h.top().second;
h.pop();
sel[c]=1;
for (j=0;j<v[c].size();j++)
{
if (mini[v[c][j].first]==-1)
{
mini[v[c][j].first]=mini[c]+v[c][j].second;
h.push({mini[v[c][j].first],v[c][j].first});
}
else
if (mini[v[c][j].first]>mini[c]+v[c][j].second)
{
mini[v[c][j].first]=mini[c]+v[c][j].second;
h.push({mini[v[c][j].first],v[c][j].first});
}
}
}
ok1=1;
for (i=1;i<=n;i++)
{
if (mini[i]!=verif[i])
{
ok1=0;
break;
}
}
for (i=1;i<=n;i++)sel[i]=0;
if (ok1==0)
{
g<<"NU"<<'\n';
}
else
{
g<<"DA"<<'\n';
}
}
return 0;
}