Pagini recente » Cod sursa (job #152099) | eusebiu_oji_2019_cls11-12 | Cod sursa (job #1749128) | Statistici David Vrabioru (VrDVY) | Cod sursa (job #672208)
Cod sursa(job #672208)
#include <cstdio>
using namespace std;
const int nd=50005,inf=1999999999;
struct nod{ int val; int cost; nod *urm; }*p[nd];
int dist[nd],n,m,t,S;
int solve()
{ int i,min;
nod *aux;
for(i=1;i<=n;++i)
{
if(i!=S)
{ min=inf;
aux=p[i];
while(aux!=NULL)
{
if(dist[aux->val]+aux->cost<min)min=dist[aux->val]+aux->cost;
aux=aux->urm;
}
if(min!=dist[i])return 0;
}
}
return 1;
}
void readData()
{ int caz,i,a,b,c;
nod *aux;
freopen("distante.out","w",stdout);
freopen("distante.in","r",stdin); scanf("%d\n",&t);
for(caz=1;caz<=t;++caz)
{
scanf("%d %d %d\n",&n,&m,&S);
for(i=1;i<=n;++i)
{
scanf("%d ",&dist[i]);
p[i]=NULL;
}
for(i=1;i<=m;++i)
{
scanf("%d %d %d\n",&a,&b,&c);
aux=new nod; aux->val=b; aux->cost=c; aux->urm=p[a]; p[a]=aux;
aux=new nod; aux->val=a; aux->cost=c; aux->urm=p[b]; p[b]=aux;
}
if(solve())printf("DA\n");
else printf("NU\n");
}
}
int main()
{
readData();
return 0;
}