Pagini recente » Cod sursa (job #589813) | Cod sursa (job #904776) | Cod sursa (job #1424929) | Cod sursa (job #885895) | Cod sursa (job #479986)
Cod sursa(job #479986)
#include<iostream>
#include<fstream>
#define NMax 50001
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int t;
void initializare_predecesor( long n, bool predecesor[NMax] )
{
long i;
for ( i = 1; i <= n; i++ )
predecesor[i] = false;
}
bool corect ()
{
long n, m, s, d[NMax], i, a, b;
int c;
bool predecesor[NMax], ok = true;
fin >> n >> m >> s;
initializare_predecesor( n, predecesor );
for ( i = 1; i <= n; i++ )
fin >> d[i];
for ( i = 1; i <= m ; i++ )
{
fin >> a >> b >> c;
if ( d[a] + c == d[b] )
predecesor[b] = true;
else
if ( d[a] + c < d[b] )
ok = false;
if ( d[b] + c == d[a] )
predecesor[a] = true;
else
if ( d[b] + c < d[a] )
ok = false;
}
if ( !ok ) return ok;
if ( d[s] != 0 ) return false;
for ( i = 1; i <= n; i++ )
if ( !predecesor[i] && i != s )
return false;
return true;
}
int main()
{
int i;
fin >> t;
for ( i = 1; i <= t; i++ )
if ( corect() ) fout << "DA" << endl;
else fout << "NU" << endl;
return 0;
}