Pagini recente » Cod sursa (job #377907) | Cod sursa (job #925930) | Cod sursa (job #1429694) | Cod sursa (job #3242567) | Cod sursa (job #2683178)
#include <bits/stdc++.h>
#define inf INT_MAX
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
vector<pair<int,int > > v[50005];
priority_queue< pair<int,int>, vector<pair<int,int> >, greater< pair<int,int> > >h;
int n,m,s,t,x,y,d[50005],dist[50005],viz[50005],c,ok;
void dijkstra(int x)
{
int nod,a,b;
h.push({0,x});
d[s]=0;
while(!h.empty())
{
nod=h.top().second;
h.pop();
if(!viz[nod])
{
for(int i=0;i<v[nod].size();i++)
{
int a=v[nod][i].first,b=v[nod][i].second;
if(d[nod]+a<d[b])
{
d[b]=d[nod]+a;
h.push({d[b],b});
}
}
viz[nod]=1;
}
}
}
int main()
{
int i;
f>>t;
while(t)
{
f>>n>>m>>s;
for(i=1; i<=n; i++) f>>dist[i];
for(i=1; i<=m; i++)
{
f>>x>>y>>c;
v[x].push_back({c,y});
v[y].push_back({c,x});
}
for(i=1; i<=n; i++)
{
d[i]=inf;
viz[i]=0;
}
dijkstra(s);
for(i=1;i<=n;i++)
{
while(!v[i].empty()) v[i].pop_back();
}
ok=1;
for(i=1;i<=n;i++) if(d[i]!=dist[i]) ok=0;
if(ok==1) g<<"DA"<<'\n';
else g<<"NU"<<'\n';
t--;
}
return 0;
}