Pagini recente » Cod sursa (job #69003) | Cod sursa (job #2736229) | Cod sursa (job #1204363) | Cod sursa (job #114672) | Cod sursa (job #2167442)
#include <bits/stdc++.h>
#define N 50010
#define INF 1000000000
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector<pair<int,int>>v[N];
priority_queue<pair<int,int>>q;
pair<int,int>p;
int a,b,c,n,m,S,T,viz[N],d[N],sol[N];
void verif()
{
fin>>n>>m>>S;
for(int i=1;i<=n;i++)
{
fin>>sol[i];
v[i].clear();
d[i]=INF;
}
d[S]=0;
for(;m;m--)
{
fin>>a>>b>>c;
v[a].push_back(make_pair(b,c));
v[b].push_back(make_pair(a,c));
}
q.push(make_pair(0,S));
while(q.size())
{
p=q.top();
q.pop();
c=-p.first;
a=p.second;
if(viz[a])continue;
viz[a]=1;
for(auto it:v[a])
{
if(c+it.second<d[it.first])
{
d[it.first]=c+it.second;
q.push(make_pair(-d[it.first],it.first));
}
}
}
for(int i=1;i<=n;i++)
{
if(d[i]!=sol[i])
{
fout<<"NU\n";
return;
}
}
fout<<"DA\n";
}
int main()
{
fin>>T;
for(;T;T--)
{
verif();
}
return 0;
}