Pagini recente » Cod sursa (job #1152192) | Votati personajul preferat Infoarena | Cod sursa (job #857880) | Cod sursa (job #2776203) | Cod sursa (job #2831184)
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int sursa[50001], destinatie[50001], costuri[50001], distante[50001];
/*
int test(int S, int M)
{
if(distante[S]) // verific daca distanta de la nodul de inceput la el insusi este 0
return -1;
for(int i = 1; i <= M; i++)
if(distante[sursa[i]] + costuri[i] < distante[destinatie[i]]) // verific daca exista un drum de o distanta mai mica fata de distanta data plimbandu-ma prin muchiile grafului
return -1;
return 1;
}
*/
int main()
{
int T, N, M, S, rez;
f >> T;
for(int i = 1; i <= T; i++)
{
rez = 1;
f >> N >> M >> S;
for(int j = 1; j <= N; j++)
f >> distante[j];
for(int j = 1; j <= N; j++)
f >> sursa[j] >> destinatie[j] >> costuri[j]; //citire
if(distante[S]) // verific daca distanta de la nodul de inceput la el insusi este 0
rez = -1;
for(int i = 1; i <= M; i++)
if(distante[sursa[i]] + costuri[i] < distante[destinatie[i]]) // verific daca exista un drum de o distanta mai mica fata de distanta data plimbandu-ma prin muchiile grafului
rez = -1;
if(rez == 1)
g << "DA\n"; // distantele date sunt corecte
else
g << "NU\n"; // s-a gasit un drum de distanta mai mica fata de cea data
}
return 0;
}