Pagini recente » Cod sursa (job #402269) | Cod sursa (job #2309570) | Cod sursa (job #3202327) | Cod sursa (job #1919837) | Cod sursa (job #2570541)
#include <bits/stdc++.h>
#define pb push_back
#define pp pop_back
#define mp make_pair
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int const lim =50001;
int const oo = 1e9;
int t,n,m,v[lim],d[lim],st;
bool ver[lim];
vector < pair < int , int > > c[lim];
struct comp
{
bool operator()(int a , int b)
{
return d[a]>d[b];
}
};
priority_queue < int , vector < int > , comp > q;
void dijk(int nod)
{
for(int i=1;i<=n;i++)
d[i]=oo;
d[nod]=0;
ver[nod]=1;
q.push(nod);
while( !q.empty() )
{
int x=q.top();
q.pop();
ver[x]=0;
for(int i=0;i<c[x].size();i++)
{
int vecin= c[x][i].first;
int cost = c[x][i].second;
if(d[vecin] > d[x] + cost )
{
d[vecin]=d[x]+cost;
if(ver[vecin]==0)
{
q.push(vecin);
ver[vecin]=1;
}
}
}
}
}
int main()
{
in>>t;
for(int i=1;i<=t;i++)
{
in>>n>>m>>st;
for(int j=1;j<=n;j++)
in>>v[j];
for(int j=1;j<=m;j++)
{
int x,y,z;
in>>x>>y>>z;
c[x].pb(mp(y,z));
c[y].pb(mp(x,z));
}
dijk(st);
bool vr=0;
for(int j=1;j<=n;j++)
if(v[j]!=d[j]) {vr=1; break;}
if(vr==0) out<<"DA";
else out<<"NU";
out<<'\n';
for(int j=1;j<=n;j++)
while( !c[j].empty() )
c[j].pp();
}
}