Pagini recente » Cod sursa (job #2571118) | Cod sursa (job #2285759) | Cod sursa (job #621871) | Cod sursa (job #1788635) | Cod sursa (job #2758386)
#include <fstream>
#include <vector>
using namespace std;
bool solve(const vector<int>& distances, const vector<vector<pair<int,int>>>& graph, int node_start){
if(distances[node_start] != 0)
return false;
for(int i = 0; i < graph.size(); ++i){
if(i != node_start){
bool valid_distance = false;
for(int j = 0; j < graph[i].size(); ++j){
if(distances[graph[i][j].first] + graph[i][j].second < distances[i])
return false;
if(distances[graph[i][j].first] + graph[i][j].second == distances[i])
valid_distance = true;
}
if(!valid_distance)
return false;
}
}
return true;
}
int main()
{
ifstream cin("distante.in");
ofstream cout("distante.out");
int T, N, M, S;
cin >> T;
for(; T > 0; --T){
cin >> N >> M >> S;
vector<int> distances(N);
vector<vector<pair<int,int>>> graph(N);
for(int i = 0; i < N; ++i)
cin >> distances[i];
int x, y, z;
for(int i = 0; i < M; ++i){
cin >> x >> y >> z;
--x; --y;
graph[x].push_back(pair<int, int>(y, z));
graph[y].push_back(pair<int, int>(x, z));
}
bool valid = solve(distances, graph, --S);
if(valid)
cout << "DA\n";
else
cout << "NU\n";
}
cin.close();
cout.close();
return 0;
}