Pagini recente » Cod sursa (job #2900626) | Cod sursa (job #2748379) | Cod sursa (job #1868320) | Cod sursa (job #2090566) | Cod sursa (job #2707722)
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int NMAX = 50005;
const int inf = 1e9;
vector < pair < int, int > > v[NMAX];
int n,m,s,distans[NMAX],dist[NMAX],viz[NMAX];
priority_queue < pair < int, int > > q;
int main(){
int i,j,x,y,z,T,node;
f >> T;
while(T--){
f >> n >> m >> s;
for(i = 1 ; i <= n ; i++){
dist[i] = inf;
viz[i] = 0;
f >> distans[i];
v[i].clear();
}
for(i = 1 ; i <= m ; i++){
f >> x >> y >> z;
v[x].push_back({y,z});
v[y].push_back({x,z});
}
q.push({0,s});
dist[s] = 0;
bool flag = true;
while(!q.empty()){
node = q.top().second;
q.pop();
if(viz[node])
continue;
if(dist[node] != distans[node])
flag = false;
viz[node] = 1;
for(auto it : v[node])
if(dist[it.first] > dist[node] + it.second){
dist[it.first] = dist[node] + it.second;
q.push({-dist[it.first], it.first});
}
}
if(flag)
g << "DA\n";
else
g << "NU\n";
}
return 0;
}