Pagini recente » Cod sursa (job #716037) | Cod sursa (job #493270) | Cod sursa (job #1934180) | Cod sursa (job #1156202) | Cod sursa (job #2855511)
#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 ;
if(d[nod] * -1 != dbr[nod])return ;
for(int f = 0 ; f < v[nod].size() ; f ++)
if(!viz[v[nod][f].first])pq.push({cost - v[nod][f].second, v[nod][f].first}) ;
}
}
}
int main()
{
ios_base::sync_with_stdio(false) ;
cin.tie(NULL) ;
cout.tie(NULL) ;
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 ;
v[f].clear() ;
d[f] = 0 ;
viz[f] = 0 ;
}
if(ok == 0)cout << "NU" << '\n' ;
else cout << "DA" << '\n' ;
}
return 0 ;
}