Pagini recente » Cod sursa (job #524083) | Cod sursa (job #2860477) | Cod sursa (job #2473282) | Cod sursa (job #2132984) | Cod sursa (job #3176494)
#include <bits/stdc++.h>
#define oo 2e9
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector<pair<int, int>> L[50005];
bitset<50005> viz;
int d[500005], p, dd[50005], n, m;
priority_queue<pair<int, int>> q;
void Citire()
{
int i, x, y, c;
fin >> n >> m >> p;
for(i=1; i<=n; i++)
fin >> dd[i];
for(i=1; i<=m; i++)
{
fin >> x >> y >> c;
L[x].push_back({c,y});
L[y].push_back({c,x});
}
}
bool Dijkstra(int P)
{
int k, i, cost;
for (k = 1; k <= n; k++)
d[k] = oo;
d[P] = 0;
q.push({0,P});
while (!q.empty())
{
k = q.top().second;
q.pop();
if (viz[k] == 0)
{
viz[k] = 1;
for (auto e : L[k])
{
i = e.second;
cost = e.first;
if (d[i] > d[k]+cost)
{
d[i] = d[k]+cost;
q.push({-d[i], i});
}
}
}
}
viz.reset();
for(i=1; i<=n; i++)
L[i].clear();
for(i=1; i<=n; i++)
if(dd[i] != d[i]) return false;
return true;
}
int main()
{
int t;
fin >> t;
while(t--)
{
Citire();
if(Dijkstra(p) == false) fout << "NU\n";
else fout << "DA\n";
}
return 0;
}