Pagini recente » Cod sursa (job #571197) | Cod sursa (job #2808744) | Cod sursa (job #2288937) | Cod sursa (job #162709) | Cod sursa (job #482152)
Cod sursa(job #482152)
#include<fstream.h>
#include<vector>
#include<queue>
#define NMAX 50005
#define mp make_pair
#define inf 100000000
using namespace std;
vector< pair<long,long> > a[NMAX];
vector<bool> v(NMAX);
vector<long> p(NMAX),d(NMAX);
queue<long> q;
long s,n,m,t;
void dijkstra(long n,long s)
{long i,k;
for(i=1;i<=n;++i)
d[i]=inf;
d[s]=0;
q.push(s);
v[s]=true;
while(!q.empty())
{k=q.front();
v[k]=false;
for(i=0;i<a[k].size();++i)
if(d[a[k][i].first]>d[k]+a[k][i].second)
{d[a[k][i].first]=d[k]+a[k][i].second;
if(!v[a[k][i].first])
{v[a[k][i].first]=true;
q.push(a[k][i].first);
}
}
q.pop();
}
}
int main()
{ifstream fin("distante.in");
ofstream fout("distante.out");
long sw,i,j,x,y,c;
fin>>t;
for(j=1;j<=t;++j)
{fin>>n>>m>>s;
for(i=1;i<=n;++i)
a[i].clear();
for(i=1;i<=n;++i)
fin>>p[i];
for(i=1;i<=m;++i)
{fin>>x>>y>>c;a[x].push_back(mp(y,c));}
dijkstra(n,s);
sw=1;
for(i=1;i<=n;++i)
if(d[i]==inf)
d[i]=0;
for(i=1;i<=n;++i)
if(d[i]!=p[i])
{sw=0;
break;
}
if(sw)
fout<<"DA\n";
else
fout<<"NU\n";
}
fin.close();
fout.close();
return 0;
}