Pagini recente » Cod sursa (job #389551) | Cod sursa (job #877081) | Cod sursa (job #682405) | Cod sursa (job #3212782) | Cod sursa (job #3271722)
#include <bits/stdc++.h>
#define len 50005
#define inf 1e9
#define pp pair<int,int>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,m,k,d[len],a[len],st,t;
vector <pp> v[len];
priority_queue <pp, vector <pp>, greater <pp> >q;
int verif(int a[],int b[])
{
for (int i=1;i<=n;i++)
if (a[i]!=b[i]) return 0;
return 1;
}
void dijkstra(int st)
{
for (int i = 1;i <= n;i++)
d[i] = inf;
d[st]=0;
q.push({0,st});
while (!q.empty())
{
int nod = q.top().second;
int cost = q.top().first;
q.pop();
if (d[nod] != cost) continue;
for (pp i : v[nod])
{
int vecin = i.first;
int cost = i.second;
if (d[nod] + cost < d[vecin])
{
d[vecin] = d[nod] + cost;
q.push({d[vecin],vecin});
}
}
}
}
int main()
{
fin>>t;
for (;t;--t)
{
fin>>n>>m>>st;
for (int i=1;i<=n;i++)
fin>>a[i];
for (int i = 1;i <= m;i++)
{
int a,b,cost;
fin>>a>>b>>cost;
v[a].push_back({b,cost});
v[b].push_back({a,cost});
}
dijkstra(st);
if (verif(a,d)) fout<<"DA\n";
else fout<<"NU\n";
}
return 0;
}