Pagini recente » Cod sursa (job #409544) | Cod sursa (job #2319956) | Cod sursa (job #1449433) | Cod sursa (job #161925) | Cod sursa (job #200436)
Cod sursa(job #200436)
//mai mergi doua ore prin ploaie
#include<stdio.h>
#include<vector>
#define nmax 50024
using namespace std;
vector < pair<int,int> >q[nmax];
vector < pair <int,int> >::iterator it;
int dmin[nmax];
bool v[nmax];
int viz[nmax],t;
int check_up(const int N)
{
int inc=1,sf=1;
int a1,a2;
int nod;
while(inc<=sf)
{
nod=viz[inc];
v[ nod ]=true;
for(it=q[nod].begin(); it!=q[nod].end(); ++it)
{
a1=it->first;
a2=it->second;
if( v[a1]==false ){
if( dmin[a1]> dmin[nod]+a2 || !dmin[a1] )
return 0;
viz[++sf]=a1,v[a1]=true;
}
}
++inc;
}
if( sf==N )
return 1;
return 0;
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int T,N,M,S;
int i;
int a1,a2,a3;
scanf("%d",&T);
while( T-- )
{
scanf("%d%d%d",&N,&M,&S);
for(i=1; i<=N; ++i) scanf("%d",&dmin[i]),v[i]=false,q[i].clear();
v[S]=true;viz[1]=S;
for(i=1; i<=M; ++i){
scanf("%d%d%d",&a1,&a2,&a3);
q[a1].push_back(make_pair(a2,a3));
q[a2].push_back(make_pair(a1,a3));
}
if( !check_up(N) )
printf("NU\n");
else
printf("DA\n");
}
return 0;
}