Pagini recente » Cod sursa (job #1602014) | Cod sursa (job #2789504) | Cod sursa (job #97174) | Cod sursa (job #2245624) | Cod sursa (job #2466420)
#include <bits/stdc++.h>
#define INF 2000000000
using namespace std;
const int N = 100005;
vector < pair < int, int > > a[N];
vector < int > d(N), ds(N);
multiset < pair < int, int > > s;
void dijkstra(int root, int n)
{
s.clear();
ds[root] = 0;
int lg = 0;
s.insert({0, root});
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) printf("DA\n");
else printf("NU\n");
}
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
int tt;
scanf("%d", &tt);
while(tt--) {
int n, m, base;
scanf("%d%d%d", &n, &m, &base);
for(int i = 1; i <= n; ++i) scanf("%d", &d[i]), ds[i] = INF, a[i].clear();
for(int i = 1; i <= m; ++i) {
int x, y, w;
scanf("%d%d%d", &x, &y, &w);
a[x].push_back({y, w});
a[y].push_back({x, w});
}
dijkstra(base, n);
}
return 0;
}