Pagini recente » Cod sursa (job #49263) | Cod sursa (job #3234808) | Cod sursa (job #358660) | Cod sursa (job #2086296) | Cod sursa (job #2274250)
#include <bits/stdc++.h>
#define maxn 50000
#define maxm 100000
using namespace std;
ifstream fin ( "distante.in" );
ofstream fout ( "distante.out" );
vector <int> g[maxn+5];
vector <int> cst[maxn+5];
int dst[maxn+5];
bool calc_dist ( int n, int m, int s )
{
int i, j, a, b, c;
bool flag = 1, ex;
for ( i = 0; i < m; i++ )
{
fin >> a >> b >> c;
a--; b--;
g[a].push_back ( b );
cst[a].push_back ( c );
g[b].push_back ( a );
cst[b].push_back ( c );
}
for ( i = 0; i < n && flag == 1; i++ )
if ( i != s )
{
j = 0;
ex = 0;
while ( j < g[i].size () && dst[g[i][j]] + cst[i][j] >= dst[i] )
{
if ( ex == 0 && dst[g[i][j]] + cst[i][j] == dst[i] )
ex = 1;
j++;
}
if ( j < g[i].size () || ex == 0 )
flag = 0;
}
for ( i = 0; i < n; i++ )
{
g[i].clear ();
cst[i].clear ();
}
return flag;
}
int main ()
{
int t;
fin >> t;
int n, m, s, i, rez;
for ( ; t > 0; t-- )
{
fin >> n >> m >> s;
for ( i = 0; i < n; i++ )
fin >> dst[i];
rez = calc_dist ( n, m, s - 1 );
if ( rez == 0 )
fout << "NU\n";
else
fout << "DA\n";
}
fin.close ();
fout.close ();
return 0;
}