Pagini recente » Cod sursa (job #1607488) | Cod sursa (job #364141) | Cod sursa (job #1737726) | Cod sursa (job #1752138) | Cod sursa (job #2349585)
#include <bits/stdc++.h>
#define maxn 100001
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
vector < pair< int, int> > v[maxn];
int n,m,t,dist[maxn],tata[maxn],s,d[maxn],a,b,c;
bool viz[maxn],ok;
struct cmp
{ bool operator()(int x, int y){ return dist[x]>dist[y];}
};
priority_queue<int, vector<int>, cmp> q;
void dijkstra( int start)
{ int nod, vecin, cost;
for(int i=1;i<=n;i++)
{ dist[i]=INT_MAX;
viz[i]=0;
}
dist[start]=0;
q.push(start);
while(!q.empty())
{ nod=q.top();
q.pop();
viz[nod]=0;
for(int i=0;i<v[nod].size();i++)
{ vecin=v[nod][i].first;
cost=v[nod][i].second;
if(dist[nod]+cost<dist[vecin])
{ dist[vecin]=dist[nod]+cost;
if(viz[vecin]==0)
{ viz[vecin]=1;
tata[vecin]=nod;
q.push(vecin);
}
}
}
}
}
int main()
{ f>>t;
for(int i=1;i<=t;i++)
{ f>>n>>m>>s;
ok=0;
for(int j=1;j<=n;j++)
f>>d[j];
for(int j=1;j<=m;j++)
{ f>>a>>b>>c;
v[a].push_back({b,c});
v[b].push_back({a,c});
}
dijkstra(s);
for(int j=1;j<=n && ok==0;j++)
if(d[j]!=dist[j]) ok=1;
if(ok==1) g<<"NU"<<'\n';
else g<<"DA"<<'\n';
for(int j=1;j<=n;j++)
v[j].clear();
}
return 0;
}