Pagini recente » Cod sursa (job #1840292) | Cod sursa (job #652777) | Cod sursa (job #397599) | Cod sursa (job #1853160) | Cod sursa (job #2033926)
#include <bits/stdc++.h>
#define Nmax 50050
#define INF (1 << 30)
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int N, S, a[Nmax], dp[Nmax];
vector < pair < int, int > > L[Nmax];
priority_queue < pair < int, int > > q;
bool used[Nmax];
inline void Solve()
{
int i, nod, nnod, cost;
for(i = 1; i <= N; i++)
dp[i] = INF;
dp[S] = 0;
q.push({0, S});
while(!q.empty())
{
nod = q.top().second;
q.pop();
if(!used[nod])
{
used[nod] = 1;
for(i = 0; i < L[nod].size(); i++)
{
nnod = L[nod][i].first;
cost = L[nod][i].second;
if(dp[nnod] > dp[nod] + cost)
{
dp[nnod] = dp[nod] + cost;
q.push({-dp[nnod], nnod});
}
}
}
}
for(i = 1; i <= N; i++)
if(a[i] != dp[i])
{
fout << "NU\n";
return;
}
fout << "DA\n";
}
int main()
{
int T, M, i, x, y, c;
fin >> T;
while(T--)
{
fin >> N >> M >> S;
for(i = 1; i <= N; i++)
fin >> a[i];
for(i = 1; i <= M; i++)
{
fin >> x >> y >> c;
L[x].push_back({y, c});
L[y].push_back({x, c});
}
Solve();
for(i = 1; i <= N; i++)
{
used[i] = 0;
L[i].clear();
}
}
fin.close();
fout.close();
return 0;
}