Pagini recente » Cod sursa (job #2822063) | Cod sursa (job #1756560) | Cod sursa (job #184232) | Cod sursa (job #2624143) | Cod sursa (job #3213321)
#include <bits/stdc++.h>
#define int long long
#define FOR(i, a, b) for(int i = a; i <= b; ++i)
#define FORR(i, a, b) for(int i = a; i >= b; --i)
using namespace std;
using vi = vector<int>;
using vvi = vector<vi>;
using pii = pair<int, int>;
#define ff first
#define ss second
#define pb push_back
using vpi = vector<pii>;
using vvpi = vector<vpi>;
const string TASK("distante");
ifstream fin(TASK + ".in");
ofstream fout(TASK + ".out");
#define cin fin
#define cout fout
const int N = 5e4 + 9;
const int Inf = 0x3f3f3f3f;
void solve()
{
int n, m, s;
cin >> n >> m >> s;
vi testd(n + 1);
FOR(i, 1, n)cin >> testd[i];
vvpi G(n + 1);
int u, v, c;
FOR(i, 1, m)
{
cin >> u >> v >> c;
G[u].pb({v, c});
G[v].pb({u, c});
}
vi d(n + 1, Inf);
d[s] = 0;
priority_queue<pii> q;q.push({0, s});
while(!q.empty())
{
int dx = q.top().ff, x = q.top().ss;
q.pop();
if(-dx > d[x])continue;
for(auto [y, c] : G[x])
if(d[y] > d[x] + c)
q.push({- (d[y] = d[x] + c), y});
}
bool ok = true;
FOR(i, 1, n)if(testd[i] != d[i])ok = false;
if(ok)cout << "DA\n";
else cout << "NU\n";
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t --)
solve();
return 0;
}