Pagini recente » Cod sursa (job #1598584) | Cod sursa (job #2506959) | Cod sursa (job #1559300) | Cod sursa (job #1856488) | Cod sursa (job #1224358)
#include<fstream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef struct lnod {
int info,c;
lnod *next;
}*nod;
int t,n,m,s,i,d[50005],x,y,c;
nod lda[50005];
bool u,viz[50005];
void add(int x,nod &y,int z) {
nod p=new lnod;
p->info=x;
p->c=z;
p->next=y;
y=p;
}
int main()
{
ifstream cin("distante.in");
ofstream cout("distante.out");
cin>>t;
while(t--)
{
memset(lda,0,sizeof(lda));
memset(viz,0,sizeof(viz));
cin>>n>>m>>s; viz[s]=1;
for(i=1;i<=n;++i) cin>>d[i];
u=(d[s]) ? 1:0;
for(i=1;i<=m && !u;++i)
cin>>x>>y>>c,add(y,lda[x],c),add(x,lda[y],c);
for(i=1;i<=n && !u;++i)
for(nod p=lda[i];p && !u;p=p->next)
{
if(d[i]+p->c<d[p->info]) u=1;
if(d[p->info]+p->c<d[i]) u=1;
if(d[i]==d[p->info]+p->c) viz[i]=1;
if(d[p->info]==d[i]+p->c) viz[p->info]=1;
}
for(i=1;i<=n && !u;++i)
if(!viz[i]) u=1;
if(u) cout<<"NU\n"; else cout<<"DA\n";
}
return 0;
}