Pagini recente » Cod sursa (job #2833137) | Cod sursa (job #2247924) | Cod sursa (job #1017041) | Cod sursa (job #2951779) | Cod sursa (job #1075484)
#include <fstream>
using namespace std;
ifstream cin( "distante.in" );
ofstream cout( "distante.out" );
int n, m, t, s, distProb[ 50001 ], d[ 500001 ];
struct edge { int x, y, cost; }a[ 100001 ];
int main()
{
int i, j, ok;
cin >> t;
for ( ; t; t-- )
{
cin >> n >> m >> s;
for ( i = 1; i <= n; i++ )
d[ i ] = 999999;
for ( i = 1; i <= n; i++ )
cin >> distProb[ i ];
for ( i = 1; i <= m; i++ )
{
cin >> a[ i ].x >> a[ i ].y >> a[ i ].cost;
if ( a[ i ].x == s ) d[ a[ i ].y ] = a[ i ].cost;
else if ( a[ i ].y == s ) d[ a[ i ].x ] = a[ i ].cost;
}
d[ s ] = 0;
ok = 1;
while ( ok )
{
ok = 0;
for ( i = 1; i <= m; i++ )
{
if ( d[ a[ i ].y ] > d[ a[ i ].x ] + a[ i ].cost )
{
d[ a[ i ].y ] = d[ a[ i ].x ] + a[ i ].cost;
ok = 1;
}
else if ( d[ a[ i ].x ] > d[ a[ i ].y ] + a[ i ].cost )
{
d[ a[ i ].x ] = d[ a[ i ].y ] + a[ i ].cost;
ok = 1;
}
}
}
//for ( i = 1; i <= n; i++ )
// cout << d[ i ] << " ";
//cout << '\n';
for ( i = 1; i <= n; i++ )
if ( d[ i ] != distProb[ i ] )
{
ok = 1;
break;
}
if ( !ok ) cout << "DA";
else cout << "NU";
cout << '\n';
}
}