Pagini recente » Cod sursa (job #2822442) | Cod sursa (job #2245358) | Cod sursa (job #1174510) | Cod sursa (job #2586604) | Cod sursa (job #3273484)
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#include <climits>
using namespace std;
const int NMAX = 50001;
int n,m,s,t;
bool isInQueue[NMAX];
int Schizophrenia_lui_Zaharel[NMAX],cost[NMAX];
struct PATH{
int nod,cost;
};
vector <PATH> v[NMAX];
struct compara
{
bool operator()(int x, int y)
{
return cost[x] > cost[y];
}
};
priority_queue<int, vector<int>, compara> q;
ifstream in("distante.in");
ofstream out("distante.out");
void Dijkstra(int start){
for(int i = 1; i <= n; i++){
cost[i] = INT_MAX;
}
cost[start] = 0;
q.push(start);
isInQueue[start] = true;
while(!q.empty()){
int nod = q.top();
q.pop();
isInQueue[nod] = false;
for(PATH neigh_path : v[nod]){ // neigh_path reprezinta drumul de la nodul curent la un nod vecin
int neigh = neigh_path.nod;// vecin
int c = neigh_path.cost;// cost de a ajunge la vecin
int new_cost = cost[nod] + c;
if(new_cost < cost[neigh]){
cost[neigh] = new_cost;
if(!isInQueue[neigh]){
q.push(neigh);
isInQueue[neigh] = true;
}
}
}
}
}
void read(){
int nod,cost,x;
in >> n >>m >> s;
for(int i = 1 ; i <= n ; i++){
in >> Schizophrenia_lui_Zaharel[i];
}
for(int i = 1 ; i <= m;i++){
in >>x >> nod >> cost;
v[x].push_back({nod,cost});
}
}
bool check(){
for(int i = 1; i <= n ; i ++){
if(cost[i] != Schizophrenia_lui_Zaharel[i]){
return false;
}
}
return true;
}
void resetdata(){
for (int i = 0; i <=n;i++){
isInQueue[i]=false;
v[i].clear();
}
}
int main(){
in >> t;
for(int i = 0 ; i < t;i++){
resetdata();
read();
Dijkstra(s);
if (check()){
out << "DA\n";
}else{
out << "NU\n";
}
}
}