Pagini recente » Cod sursa (job #2795399) | Cod sursa (job #2512204) | Cod sursa (job #1554542) | Cod sursa (job #1768457) | Cod sursa (job #2666642)
#include <fstream>
#include <vector>
#include <queue>
#define DIM 50500
using namespace std;
ifstream cin( "distante.in" );
ofstream cout( "distante.out" );
int t, n, m, sursa;
vector< pair<int, int> > G[DIM];
int solb[DIM], viz[DIM], d[DIM];
void citire()
{
int x, y, cost ;
cin >> n >> m >> sursa;
for (int i = 1; i <= n; i++)
cin >> solb[i],
G[i].clear(),
viz[i] = 0,
d[i] = 2000000000;
for (int i = 1; i <= m; i++)
cin >> x >> y >> cost,
G[x].push_back({y, cost}),
G[y].push_back({x, cost});
}
void rez()
{
int x, y, cost, nod, vecin;
queue<int> Q;
Q.push(sursa);
d[sursa] = 0;
while ( !Q.empty() )
{
nod = Q.front();
for (int x = 0; x < G[nod].size() ; x++)
{
vecin = G[nod][x].first;
cost = G[nod][x].second;
if ( d[vecin] > d[nod]+cost )
{
d[vecin] = d[nod]+cost;
if ( viz[vecin]) continue;
viz[vecin] = 1;
Q.push(vecin);
}
}
viz[nod] = 0;
Q.pop();
}
}
void afis()
{
for (int i = 1; i <= n; i++ )
if ( d[i] != solb[i] )
{
cout << "NU \n";
return ;
}
cout << "DA \n";
}
int main()
{
for ( cin >> t; t--; )
{
citire();
rez();
afis();
}
return 0;
}