Pagini recente » Cod sursa (job #109279) | Cod sursa (job #2105966) | Cod sursa (job #2322846) | Cod sursa (job #335914) | Cod sursa (job #893558)
Cod sursa(job #893558)
// Include
#include <fstream>
#include <cstring>
using namespace std;
// Constante
const int sz = (int)5e4+1;
// Variabile
ifstream in("distante.in");
ofstream out("distante.out");
int tests;
int nodes, edges, source;
int dist[sz];
// Main
int main()
{
in >> tests;
while(tests--)
{
in >> nodes >> edges >> source;
int rFrom, rTo, rCost;
for(int i=1 ; i<=nodes ; ++i)
in >> dist[i];
bool valide = (dist[source] == 0);
bool valideDist[sz];
memset(valideDist, false, sizeof(valideDist));
valideDist[source] = true;
while(edges--)
{
in >> rFrom >> rTo >> rCost;
valide &= dist[rTo] <= dist[rFrom] + rCost;
valide &= dist[rFrom] <= dist[rTo] + rCost;
valideDist[rTo] |= dist[rFrom] + rCost == dist[rTo];
valideDist[rFrom] |= dist[rTo] + rCost == dist[rFrom];
}
for(int i=1 ; i<=nodes && valide ; ++i)
valide &= valideDist[i];
out << (valide? "DA" : "NU") << '\n';
}
in.close();
out.close();
return 0;
}