Pagini recente » Cod sursa (job #283879) | Cod sursa (job #1499302) | Cod sursa (job #979062) | Cod sursa (job #2104084) | Cod sursa (job #2354366)
#include <bits/stdc++.h>
#define pii pair <int, int>
#define mp make_pair
#define f first
#define s second
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
const int nMax = 50000;
int t, n, m, s, i, a, b, c;
int d[nMax + 10], q[nMax + 10];
vector <pii> v[nMax + 10];
priority_queue < pii, vector <pii>, greater <pii> > pq;
int main()
{
fin >> t;
while(t--)
{
fin >> n >> m >> s;
for(i=1; i<=n; i++)
fin >> q[i];
for(i=1; i<=m; i++)
{
fin >> a >> b >> c;
v[a].push_back(mp(b,c));
v[b].push_back(mp(a,c));
}
pq.push(mp(1, s));
while(!pq.empty())
{
pii nod = pq.top(); pq.pop();
if(d[nod.s]) continue;
d[nod.s] = nod.f;
for(auto it : v[nod.s])
if(!d[it.f]) pq.push(mp(nod.f + it.s, it.f));
}
for(i=1; i<=n; i++)
if(q[i]+1 != d[i]) break;
if(i == n+1) fout << "DA\n";
else fout << "NU\n";
for(i=1; i<=n; i++)
{
v[i].clear();
d[i] = 0;
}
}
return 0;
}