Pagini recente » Cod sursa (job #137419) | Cod sursa (job #1934239) | Cod sursa (job #1248846) | Cod sursa (job #2849548) | Cod sursa (job #2302790)
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50010
#define inf 2e9
using namespace std;
ifstream f("distante.in");
ofstream g("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()
{
f>>t;
for(i1=1;i1<=t;i1++)
{
f>>n>>m>>st;
for(i2=1;i2<=n;i2++)
f>>d1[i2];
for(i2=1;i2<=m;i2++)
{
f>>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) g<<"DA"<<'\n';
else g<<"NU"<<'\n';
}
return 0;
}