Pagini recente » Cod sursa (job #805611) | Cod sursa (job #2750742) | Cod sursa (job #815421) | Cod sursa (job #1054605) | Cod sursa (job #212346)
Cod sursa(job #212346)
using namespace std;
#include <cstdio>
#include <string>
#include <vector>
#include <queue>
#define DIM 8192
#define oo 0x3f3f3f3f
char ax[DIM];
int pz;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
}
}
vector<vector<pair<int, int> > > a;
int n, m, M,S;
int d[50001], d1[50001];
void bell()
{
int ok=1,i;
memset(d,oo, sizeof(d));
d[S]=0;
int p, q, c;
bool inq[50001];
memset(inq, 0,sizeof(inq));
inq[S]=1;
queue<int>Q;
Q.push(S);
while(!Q.empty())
{
int u=Q.front();
Q.pop();
inq[u]=0;
for(typeof a[u].begin() it=a[u].begin(); it!=a[u].end();++it)
if(d[u] + it->second < d[it->first])
{
d[it->first]=d[u] + it->second;
if(!inq[it->first])
{
Q.push(it->first);
inq[it->first]=1;
}
}
}
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int T,p,q,c,i;
cit(T);
while(T--)
{
cit(n);cit(m);cit(S);
M=0;
for(i=1;i<=n;++i) cit(d1[i]);
a.clear();
a.resize(n+1);
while(m--)
{
cit(p);cit(q);cit(c);
a[p].push_back(make_pair(q,c));
a[q].push_back(make_pair(p,c));
}
bell();
int ok=1;
for(i=1;i<=n;++i) if(d1[i]!=d[i]){ ok=0;break;}
if(ok) printf("DA\n");
else printf("NU\n");
}
return 0;
}