Pagini recente » Cod sursa (job #104611) | Cod sursa (job #28403) | Cod sursa (job #1933289) | Cod sursa (job #96759) | Cod sursa (job #3154600)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ("distante.in");
ofstream cout ("distante.out");
int main(){
int grafuri;
cin >> grafuri;
for (int gr = 1; gr <= grafuri; gr++){
vector<int>vecini[50005];
vector<int> muchii_corespondente[50005];
bool distcorecte = true;
int distante[50005];
int much[100001][4];
int noduri, muchii, sursa;
cin >> noduri >> muchii >> sursa;
for (int i = 1; i <= noduri; i++){
cin >> distante[i];
}
for (int i = 1; i <= muchii; i++){
int x, y, cost;
cin >> x >> y >> cost;
muchii_corespondente[x].push_back(i);
muchii_corespondente[y].push_back(i);
vecini[x].push_back(y);
vecini[y].push_back(x);
much[i][1] = x;
much[i][2]= y;
much[i][3] = cost;
}
for (int i = 1; i <= noduri; i++){
int dist_min = 1000000001;
if (sursa != i) {
for (int j = 0; j < vecini[i].size(); j++) {
int muchia_corespondenta = muchii_corespondente[i][j];
int dist_totala = distante[vecini[i][j]] + much[muchia_corespondenta][3];
dist_min = min(dist_min, dist_totala);
}
if (dist_min != distante[i]) {
distcorecte = false;
cout << "NU" << '\n';
break;
}
} else {
if (distante[i] != 0) {
distcorecte = false;
cout << "NU" << '\n';
}
}
}
if (distcorecte == true)
cout << "DA" << '\n';
}
return 0;
}