Pagini recente » Cod sursa (job #607467) | Cod sursa (job #313069) | Cod sursa (job #138217) | Cod sursa (job #2998524) | Cod sursa (job #1915223)
#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);
#define tie cin.tie(0);
#define mp make_pair
#define pb push_back
#define ll long long
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define zeros(x) ( (x ^ (x - 1)) & x )
#define INF 0x3f3f3f3f
using namespace std;
ll n, m, k, x, y, z, t;
vector < PII > V[50100];
int dist[50100], check[50100];
void dijkstra(int x)
{
multiset < PII > S;
S.insert({0, x});
for (int i = 1; i <= n; i++) dist[i] = INF;
dist[x] = 0;
while (!S.empty())
{
int curr = S.begin()->second;
S.erase(S.begin());
for (auto it : V[curr])
{
int next = it.first;
int w = it.second;
if (dist[next] > dist[curr] + w)
{
if (dist[next] != INF)
S.erase(S.find({dist[next], next}));
dist[next] = dist[curr] + w;
S.insert({dist[next], next});
}
}
}
}
int main(){
IOS tie
ifstream cin("distante.in");
ofstream cout("distante.out");
cin >> t;
while (t--)
{
int fl = 1;
cin >> n >> m >> k;
for (int i = 1; i <= n; i++) cin >> check[i], dist[i] = INF, V[i].clear();
while (m--)
{
cin >> x >> y >> z;
V[x].push_back({y, z});
V[y].push_back({x, z});
}
dijkstra(k);
for (int i = 1; i <= n; i++)
{
dist[i] = (dist[i] == INF ? 0 : dist[i]);
if (dist[i] != check[i]){fl = 0; break;}
}
cout << (fl ? "DA" : "NU") << "\n";
}
cerr << "Fucking time elapsed: " << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << '\n';
return 0;
}