Pagini recente » Cod sursa (job #727597) | Cod sursa (job #300783) | Cod sursa (job #3159687) | Cod sursa (job #1905551) | Cod sursa (job #2343021)
#include <bits/stdc++.h>
using namespace std;
#define pp pair<int,int>
#define oo 100000000
#define RRR ios_base::sync_with_stdio(false);cin.tie(0);
#define ll long long
#define int ll
int verif[50001];
int dist[50001];
int ar[5001][5001];
int n,m,s;
void calculate(int s)
{
for (int i=0;i<=n;i++)
dist[i] = oo;
priority_queue < pair< int,int> > S;
S.push(make_pair(0,s));
dist[s] = 0;
while (!S.empty())
{
int u = S.top().second;
S.pop();
for (int i=1;i<=n;i++)
{
if (ar[u][i] != 0)
{
if (dist[i] > dist[u] + ar[u][i])
{
dist[i] = dist[u] +ar[u][i];
S.push(make_pair(dist[u],i));
}
}
}
}
}
int32_t main()
{RRR
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int t;
cin >> t;
while (t--)
{
cin >> n >> m >> s;
for (int i=0;i<n;i++) cin >> verif[i];
for (int i=0;i<m;i++)
{
int a,b,c;
cin >> a >> b >>c;
ar[a][b] = ar[b][a] = c;
}
calculate(s);
bool k = false;
for (int i=0;i<n;i++)
if (verif[i] != dist[i+1]) k = true;
if (!k) cout << "DA\n"; else cout << "NU\n";
}
return 0;
}