Pagini recente » Cod sursa (job #960186) | Cod sursa (job #1016074) | Cod sursa (job #333247) | Cod sursa (job #1849078) | Cod sursa (job #3310221)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define pb push_back
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int TMAX=10,NMAX=50000;
int i, t,n,m,start,sol[NMAX+5],node,node1,node2,cost,d[NMAX+5];
bool ans;
vector <pair<int,int>> edge[NMAX+5];
priority_queue <pair<int,int> , vector<pair<int,int>> , greater<pair<int,int>>> pq;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0); fout.tie(0);
fin>>t;
while (t--)
{
ans=1;
fin>>n>>m>>start;
for (i=1; i<=n; i++)
fin>>sol[i];
while (m--)
{
fin>>node1>>node2>>cost;
edge[node1].pb({node2,cost});
edge[node2].pb({node1,cost});
}
for (i=1; i<=n; i++)
d[i]=2e9;
d[start]=0;
pq.push({d[start],start});
while (!pq.empty())
{
node=pq.top().second; cost=pq.top().first;
pq.pop();
if (cost>d[node])
continue;
for (auto x: edge[node])
{
int node2=x.first,cost2=x.second;
if (d[node2]>cost+cost2)
{
d[node2]=cost+cost2;
pq.push({d[node2],node2});
}
}
}
for (i=1; i<=n; i++)
if (sol[i]!=d[i])
ans=0;
for (i=1; i<=n; i++)
edge[i].clear();
if (ans==1)
fout<<"DA"<<'\n';
else
fout<<"NU"<<'\n';
}
return 0;
}