Pagini recente » Cod sursa (job #2701313) | Cod sursa (job #1098685) | Cod sursa (job #2192449) | Cod sursa (job #1949195) | Cod sursa (job #2466428)
#include <bits/stdc++.h>
#define INF 2000000000
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
const int N = 100005;
vector < pair < int, int > > a[N];
vector < int > d(N), ds(N);
multiset < pair < int, int > > s;
int x, y, w, n, m, base;
void dijkstra()
{
s.clear();
ds[base] = 0;
int lg = 0;
s.insert({0, base});
bool ok = true;
while(!s.empty() && ok == true) {
int v = s.begin() -> second;
lg += s.begin() -> first;
s.erase(s.begin());
for(auto x : a[v]) {
int to = x.first, len = x.second;
if(ds[to] > ds[v] + len) {
s.erase({ds[to], to});
ds[to] = ds[v] + len;
s.insert({ds[to], to});
}
}
if(ds[v] != d[v]) ok = false;
}
if(ok == true) fout << "DA\n";
else fout << "NU\n";
}
int main()
{
ios::sync_with_stdio(false);
fin.tie(0);
int tt;
fin >> tt;
while(tt--) {
fin >> n >> m >> base;
for(int i = 1; i <= n; ++i) fin >> d[i], ds[i] = INF, a[i].clear();
for(int i = 1; i <= m; ++i) {
fin >> x >> y >> w;
a[x].push_back({y, w});
a[y].push_back({x, w});
}
dijkstra();
}
return 0;
}