Pagini recente » Cod sursa (job #1526861) | Cod sursa (job #2878005) | Cod sursa (job #1087049) | Cod sursa (job #1283702) | Cod sursa (job #2456732)
#include <bits/stdc++.h>
#define NM 50005
#define oo (1<<30)
#define pii pair<int,int>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int n,m,s,t,d[NM],sol[NM];
bool viz[NM];
struct ok
{ bool operator()(int x,int y)
{ return d[x]>d[y]; }
};
vector <pii> v[NM];
priority_queue <int,vector<int>,ok> heap;
void Read();
void Solve();
void Write();
void ClearVec();
void Dijkstra();
int main()
{ Solve();
return 0;
}
void Read()
{ f>>n>>m>>s;
for(int i=1; i<=n; i++)
f>>sol[i];
for
( int x,y,c;
m--;
f>>x>>y>>c,
v[x].push_back({y,c}),
v[y].push_back({x,c})
);
}
void Dijkstra()
{ for(int i=1; i<=n; i++)
d[i]=oo;
d[s]=0;
heap.push(s);
viz[s]=true;
while(!heap.empty())
{ int nod=heap.top();
heap.pop();
viz[nod]=false;
for(int i=0; i<v[nod].size(); i++)
{ int nodV=v[nod][i].first;
int cost=v[nod][i].second;
if(d[nod]+cost<d[nodV])
{ d[nodV]=d[nod]+cost;
if(!viz[nodV])
{ viz[nodV]=true;
heap.push(nodV);
}
}
}
}
}
void Write()
{ bool ok=true;
for(int i=1; i<=n; i++)
d[i]!=sol[i] ? ok=false : ok=ok;
g<<(ok ? "DA\n" : "NU\n");
}
void ClearVec()
{ for(int i=0; i<NM; i++)
v[i].clear();
}
void Solve()
{ f>>t;
while(t--)
{ Read();
Dijkstra();
Write();
ClearVec();
}
}