Pagini recente » Cod sursa (job #547511) | Cod sursa (job #1394085) | Cod sursa (job #697315) | Cod sursa (job #2755152) | Cod sursa (job #2339360)
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
using namespace std;
ifstream in ("distante.in") ;
ofstream out ("distante.out") ;
const int NR = 50005 ;
const int oo = ( 1 << 30 ) ;
vector < pair < int , int > > v [ NR ] ;
int n , f [ NR ] ;
bool bellman ( int start )
{
vector < int > d ( NR , oo ) ;
queue < int > q ;
q.push( start ) ;
d [ start ] = 0 ;
while ( !q.empty() )
{
int nod = q.front() ;
q.pop() ;
for ( size_t i = 0 ; i < v [ nod ].size() ; ++ i )
{
int vecin = v[ nod ][ i ].first ;
int cost = v [ nod ][ i ].second ;
if ( d [ nod ] + cost < d [ vecin ] ) d [ vecin ] = d [ nod ] + cost , q.push( vecin ) ;
}
}
for ( int i = 1 ; i <= n ; ++ i ) if ( d[ i ] != f [ i ] ) return false ;
return true ;
}
int main ()
{
int t ; in >> t ;
while ( t -- )
{
int q , start ;
in >> n >> q >> start ;
for ( int i = 1 ; i <= n ; ++ i ) in >> f [ i ] ;
while ( q -- )
{
int x , y , z ;
in >> x >> y >> z ;
v [ x ].pb ( mp ( y , z ) ) ;
v [ y ].pb ( mp ( x , z ) ) ;
}
if ( bellman( start ) ) out << "DA\n";
else out << "NU\n" ;
for ( int i = 1 ; i <= n ; ++ i ) v [ i ].clear() ;
}
return 0 ;
}