Pagini recente » Cod sursa (job #958542) | Cod sursa (job #1310540) | Rating Pirvulescu Daria Maria (daria_pirvulescu) | Cod sursa (job #1549714) | Cod sursa (job #3221446)
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int NMAX = 5e4 + 5, INF = 1e9 + 7;
int n, m, dist[NMAX], ans[NMAX], s;
vector<pair<int, int>> v[NMAX];
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
bool viz[NMAX];
void query()
{
cin >> n >> m >> s;
for(int i = 1; i <= n; i++)
v[i].clear();
int a, b, cost;
for(int i = 1; i <= n; i++)
cin >> dist[i];
for(int i = 1; i <= m; i++)
{
cin >> a >> b >> cost;
v[a].push_back({b, cost});
v[b].push_back({a, cost});
}
for(int i = 1; i <= n; i++)
{
ans[i] = INF;
viz[i] = 0;
}
q.push({0, s});
while(!q.empty())
{
int nod = q.top().second, cost = q.top().first;
q.pop();
if(viz[nod])
continue;
viz[nod] = true;
ans[nod] = cost;
for(auto u : v[nod])
{
if(!viz[u.first] && ans[u.first] > cost + u.second)
{
ans[u.first] = cost + u.second;
q.push({ans[u.first], u.first});
}
}
}
for(int i = 1; i <= n; i++)
{
if(ans[i] != dist[i])
{
cout << "NU";
return;
}
}
cout << "DA";
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
int t;
cin >> t;
while(t--)
{
query();
cout << "\n";
}
}