Pagini recente » Cod sursa (job #1803059) | Cod sursa (job #1048781) | Cod sursa (job #2972540) | Cod sursa (job #1771494) | Cod sursa (job #2302888)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50010
#define inf 2e9
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector <pair<int,int> > v[NMAX];
priority_queue <pair<int,int>,vector <pair<int,int> >,greater <pair<int,int> > > h;
int n,d[NMAX],d1[NMAX],t,i1,i2,i,m,st,x,y,c,ok;
void dijkstra(int st)
{
int i,nod,dst,vec;
for(i=1;i<=n;i++) d[i]=inf;
d[st]=0;
h.push({0,st});
while(!h.empty())
{
nod=h.top().second;
h.pop();
for(i=0;i<v[nod].size();i++)
{
vec=v[nod][i].first;
dst=v[nod][i].second;
if(d[vec]>d[nod]+dst) {d[vec]=d[nod]+dst;h.push({d[vec],vec});}
}
}
}
int main()
{
fin>>t;
for(i1=1;i1<=t;i1++)
{
fin>>n>>m>>st;
for(i2=1;i2<=n;i2++)
fin>>d1[i2];
for(i2=1;i2<=m;i2++)
{
fin>>x>>y>>c;
v[x].push_back({y,c});
v[y].push_back({x,c});
}
dijkstra(st);
ok=1;
for(i=1;i<=n;i++) v[i].clear();
for(i=1;i<=n&&ok;i++) if(d[i]!=d1[i]) ok=0;
if(ok) fout<<"DA"<<'\n';
else fout<<"NU"<<'\n';
}
return 0;
}