Pagini recente » Cod sursa (job #1743828) | Cod sursa (job #895440) | Cod sursa (job #2657357) | Cod sursa (job #1381506) | Cod sursa (job #2855496)
#include <fstream>
#include <deque>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
#include <cstring>
#include <climits>
#define MOD 104659
using namespace std ;
ifstream cin ("distante.in") ;
ofstream cout ("distante.out") ;
int viz[50009], d[50009], dbr[50009] ;
vector<pair<int, int> > v[50009] ;
void dijakstra(int st)
{
priority_queue<pair<int, int> > pq ;
pq.push({0, st}) ;
while(pq.size())
{
int nod = pq.top().second ;
int cost = pq.top().first ;
pq.pop() ;
if(!viz[nod])
{
viz[nod] = 1 ;
d[nod] = cost ;
for(int f = 0 ; f < v[nod].size() ; f ++)
pq.push({cost - v[nod][f].second, v[nod][f].first}) ;
}
}
}
int main()
{
int q ;
cin >> q ;
while(q --)
{
int n, m, start ;
cin >> n >> m >> start ;
for(int f = 1 ; f <= n ; f ++)
cin >> dbr[f] ;
while(m --)
{
int a, b, c ;
cin >> a >> b >> c ;
v[a].push_back({b, c}) ;
v[b].push_back({a, c}) ;
}
dijakstra(start) ;
int ok = 1 ;
for(int f = 1 ; f <= n ; f ++)
if(d[f] * -1 != dbr[f])ok = 0 ;
if(ok == 0)cout << "NU" << '\n' ;
else cout << "DA" << '\n' ;
for(int f = 1 ; f <= n ; f ++)
v[f].clear() ;
for(int f = 1 ; f <= n ; f ++)
d[f] = 0, viz[f] = 0 ;
}
return 0 ;
}