Pagini recente » Cod sursa (job #29094) | Cod sursa (job #1051018) | Cod sursa (job #2891078) | Cod sursa (job #3145102) | Cod sursa (job #2126955)
#include<fstream>
#include<vector>
#include<queue>
#define pb push_back
#define x first
#define y second
#define DN 50005
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int t,n,m,s,d[DN],dist[DN],p,f,g,nod,c;
vector<pair<int,int> >v[DN];
priority_queue<pair<int,int> >q;
void ve()
{
while(!q.empty())
{
c=-q.top().x;
nod=q.top().y;
q.pop();
if(c!=dist[nod])
continue;
for(auto i:v[nod])
if(dist[nod]+i.y<dist[i.x])
{
dist[i.x]=dist[nod]+i.y;
q.push({-dist[i.x],i.x});
}
}
}
int main()
{
fin>>t;
for(int h=1;h<=t;h++)
{
fin>>n>>m>>s;
for(int i=1;i<=n;i++)
{
v[i].clear();
fin>>d[i];
dist[i]=1e9;
}
dist[s]=0;
for(int i=1;i<=m;i++)
{
fin>>f>>g>>c;
v[f].pb({g,c});
v[g].pb({f,c});
}
q.push({0,s});
ve();
p=1;
for(int i=1;i<=n;i++)
if(d[i]!=dist[i])
{
p=0;
break;
}
if(p)
fout<<"DA";
else
fout<<"NU";
fout<<'\n';
}
}