Pagini recente » Cod sursa (job #521305) | Cod sursa (job #2458519) | Cod sursa (job #2110958) | Cod sursa (job #1876281) | Cod sursa (job #2422975)
#include<fstream>
#include<vector>
#include<string>
#include<queue>
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
typedef unsigned short us;
int t;
int n,m,s;
int cnt;
vector<int> d;
vector<bool> viz;
vector<vector<pair<us,us> > > G[11];
queue<us> Q;
string ans(us t){
if(d[s]!=0) return "NU";
Q.push(s);
viz[s]=1;
cnt=n;
while(!Q.empty()){
us x=Q.front();
Q.pop(); --cnt;
for(int i=0;i<G[t][x].size();i++){
us y=G[t][x][i].first;
us z=G[t][x][i].second;
if(!viz[y] && d[x]+z==d[y]){
Q.push(y);
viz[y]=1;
}
}
}
if(cnt>0) return "NU";
return "DA";
}
int main(){
cin>>t;
for(us r=1;r<=t;r++){
cin>>n>>m>>s;
viz.resize(n+1,0);
d.resize(n+1);
for(us i=1;i<=n;i++)
cin>>d[i];
G[r].resize(n+1);
for(int i=1;i<=m;i++){
us x,y,z;
cin>>x>>y>>z;
G[r][x].push_back(make_pair(y,z));
G[r][y].push_back(make_pair(x,z));
}
cout<<ans(r)<<'\n';
d.clear();
viz.clear();
}
}