Pagini recente » Cod sursa (job #2852642) | Cod sursa (job #1552213) | Cod sursa (job #707712) | Cod sursa (job #261770) | Cod sursa (job #2971679)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
int main(){
int n,m,s,t;
cin>>t;
for(int kk=1;kk<=t;kk++){
int costverif[50001],dist[50001],viz[50001];
cin>>n>>m>>s;
vector<pair<int,int> > a[50001];
for(int i=1;i<=n;i++)
cin>>costverif[i];
for(int i=1;i<=m;i++){
int x,y,c;
cin>>x>>y>>c;
a[x].push_back(make_pair(c,y));
a[y].push_back(make_pair(c,x));
}
priority_queue<pair<int,int> > q;
for(int i=1;i<=n;i++)
dist[i]=999999999,viz[i]=0;
dist[s]=0;
q.push(make_pair(0,s));
while(!q.empty()){
int nod=q.top().second;
int costaj=dist[nod];
q.pop();
if(viz[nod]==0){
viz[nod]=1;
for(int i=0;i<a[nod].size();i++){
int vecin=a[nod][i].second;
if(costaj+a[nod][i].first<dist[vecin]){
dist[vecin]=costaj+a[nod][i].first;
q.push(make_pair(-dist[vecin],vecin));
}
}
}
}
int ok=0;
for(int i=1;i<=n;i++)
if(dist[i]!=costverif[i]){
ok=1;
break;
}
if(ok)
cout<<"NU"<<"\n";
else
cout<<"DA"<<"\n";
}
}