Pagini recente » Cod sursa (job #489142) | Cod sursa (job #969459) | Cod sursa (job #788909) | Cod sursa (job #2490116) | Cod sursa (job #1347343)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
struct much{int b,c;};
much str;
vector<much>v[50001];
int vec[50001],n,m,s,a,b,c,t;
bool rez[50001];
bool verif(){
if(vec[s]!=0){
return false;
}
memset(rez,false,n);
rez[s]=true;
for(int i=1;i<=n;i++)
for(int j=0;j<v[i].size();j++){
if(vec[i]+v[i][j].c<vec[v[i][j].b])
return false;
if(vec[i]+v[i][j].c==vec[v[i][j].b])
rez[v[i][j].b]=true;
}
for(int i=1;i<=n;i++)
if(rez[i]==false)
return false;
return true;
}
int main(){
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(int q=1;q<=t;q++){
scanf("%d%d%d",&n,&m,&s);
for(int i=1;i<=n;i++){
scanf("%d",&vec[i]);
v[i].clear();
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
str.b=b;
str.c=c;
v[a].push_back(str);
str.b=a;
v[b].push_back(str);
}
if(verif()==false)
printf("NU\n");
else
printf("DA\n");
}
return 0;
}