Pagini recente » Cod sursa (job #751931) | Cod sursa (job #3320917) | Cod sursa (job #3321081) | Cod sursa (job #3307079) | Cod sursa (job #3341135)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <climits>
#define NMAX 10
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
vector <pair<int, int>> graph[NMAX];
priority_queue <pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
vector <int> dijkstra (int source, int nodes, int edges){
vector <int> dist (nodes+1, INT_MAX);
int node, cost;
pq.push({0, source});
dist[source] = 0;
while (!pq.empty()){
node = pq.top().second;
cost = pq.top().first;
pq.pop();
if (dist[node] < cost)
continue;
for (auto idx:graph[node]){
if (dist[idx.first] > dist[node] + idx.second){
dist[idx.first] = dist[node] + idx.second;
pq.push({dist[idx.first], idx.first});
}
}
}
return dist;
}
int main (){
int test, nodes, edges, source, x, y, cost;
in >> test;
while(test--){
in >> nodes >> edges >> source;
vector <int> distInit (nodes+1, INT_MAX);
for (int i=1; i<=nodes; ++i){
in >> distInit[i];
graph[i].clear();
}
for (int i=1; i<=edges; ++i){
in >> x >> y >> cost;
graph[x].push_back({y, cost});
graph[y].push_back({x, cost});
}
vector <int> distFinal = dijkstra (source, nodes, edges);
if (distInit == distFinal)
out << "DA" << '\n';
else out << "NU" << '\n';
}
return 0;
}