Pagini recente » Cod sursa (job #933689) | Cod sursa (job #1095572) | Cod sursa (job #2866709) | Cod sursa (job #795990) | Cod sursa (job #2445187)
#include<bits/stdc++.h>
using namespace std;
bool dijkastra(const vector<pair<int, int>> v[50001], const vector<int>& dist, const int& s)
{
priority_queue<pair<int, int>, vector<pair<int, int>>, std::greater<pair<int, int>>> H;
int d[50001];
memset(d, 0x3f3f3f3f, sizeof(d));
d[s] = 0;
for (H.push({ d[s], s }); !H.empty();)
{
pair<int, int> p = H.top();
H.pop();
if (p.first != d[p.second])
continue;
for (pair<int, int> pp : v[p.second])
{
long s = p.first + pp.second;
if (s < d[pp.first])
{
d[pp.first] = s;
H.push({ s, pp.first });
}
}
}
for (int i = 0; i < dist.size(); ++i)
if (dist[i] != d[i])
return false;
return true;
}
int main()
{
ifstream fin("distante.in");
ofstream fout("distante.out");
int n, m, t, s;
fin >> t;
for (int i = 0; i < t; ++i)
{
int a, b, c;
vector<pair<int, int>> v[50001];
vector<int> dist;
fin >> n >> m >> s;
--s;
for (int i = 0; i < n; ++i)
{
fin >> c;
dist.push_back(c);
}
for (int j = 0; j < m; ++j)
{
fin >> a >> b >> c;
--a;
--b;
v[a].push_back({ b, c });
v[b].push_back({ a, c });
}
fout << (dijkastra(v, dist, s) ? "DA\n" : "NU\n");
}
fin.close();
fout.close();
return 0;
}