Pagini recente » Cod sursa (job #768347) | Cod sursa (job #3261860) | Cod sursa (job #1559540) | Cod sursa (job #1150882) | Cod sursa (job #3158254)
#include <fstream>
#include <set>
#define INF 2e9
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int n,m,s, a[50001],d[50001];
set<pair<int,int>> v[50001];
set<pair<int,int>> Q;
void init(int n)
{
int i;
for(i=1;i<=n;i++){d[i] = INF;}
}
void dijkstra(int nod)
{
Q.insert(make_pair(0, nod));
while(!Q.empty())
{
nod = Q.begin()->second;
Q.erase(Q.begin());
for(set<pair<int,int>>::iterator it=v[nod].begin(); it!=v[nod].end(); it++)
{
int nod_next = it->first;
int cost_next = it->second;
if(d[nod] + cost_next < d[nod_next])
{
Q.erase(make_pair(d[nod_next], nod_next));
d[nod_next] = d[nod] + cost_next;
Q.insert(make_pair(d[nod_next], nod_next));
}
}
}
Q.clear();
}
int main()
{
int t,i,x,y,c;
f>>t;
for(int h = 1; h <= t; h++)
{
f>>n>>m>>s;
for(i=1;i<=n;i++)f>>a[i];
for(i = 1; i <= m; i++){
f>>x>>y>>c;
v[x].insert(make_pair(y, c));
v[y].insert(make_pair(x, c));
}
init(n);
d[s]=0;
dijkstra(s);
int ok=1;
for(i=1;i<=n;i++){
if(a[i]!=d[i]){ok=0;}
}
if(ok==1){g<<"DA";}
else{g<<"NU";}
g<<'\n';
}
return 0;
}