Pagini recente » Cod sursa (job #714580) | Cod sursa (job #1118867) | Cod sursa (job #239260) | Cod sursa (job #2439409) | Cod sursa (job #2829887)
#include <iostream>
#include <bits/stdc++.h>
#define inf 1e9
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int t, n, m, s;
vector<pair<int, int>> la[50001];
int viz[50001];
int dist[50001];
int dist_est[50001];
void dij()
{
priority_queue<pair<int, int>> pq;
pq.push({0, s});
dist[s] = 0;
while (pq.size())
{
int from = pq.top().second;
pq.pop();
if (viz[from])
continue;
viz[from] = 1;
for (auto& [to, cost]: la[from])
{
if (dist[from] + cost < dist[to])
{
dist[to] = dist[from] + cost;
pq.push({-dist[to], to});
}
}
}
}
int main()
{
in >> t;
while (t --)
{
in >> n >> m >> s;
for (int i = 1; i <= n; i++)
{
int c;
in >> c;
dist_est[i] = c;
}
for (int i = 1; i <= n; i++)
{
viz[i] = 0;
dist[i] = inf;
}
for (int i = 0; i < m; i++)
{
int from, to, cost;
in >> from >> to >> cost;
la[from].push_back({to, cost});
la[to].push_back({from, cost});
}
dij();
for (int i = 1; i <= n; i++)
{
if (dist[i] != dist_est[i])
{
out << "NU\n";
goto skipda;
}
}
out << "DA\n";
skipda:
for (int i = 1; i <= n; i++)
la[i].clear();
}
return 0;
}