Pagini recente » Cod sursa (job #229695) | Cod sursa (job #420429) | Cod sursa (job #2141482) | Cod sursa (job #556792) | Cod sursa (job #2307547)
#include <bits/stdc++.h>
int dist[50000];
int best[50000];
std::vector<int> v[50000][2];
std::priority_queue< std::pair<int, int> > h;
void reset(){
for(int i=0;i<50000;i++){
best[i]=1;
v[i][0].clear();
v[i][1].clear();
}
}
int check(int n){
int x=1;
for(int i=0;i<n;i++){
if(-best[i]!=dist[i])
x=0;
}
return x;
}
int main()
{
int t,n,m,k,i,a,b,c,rsp,nd,val;
FILE*fi,*fo;
fi=fopen("distante.in","r");
fo=fopen("distante.out","w");
fscanf(fi,"%d",&t);
for(int q=0;q<t;q++){
reset();
fscanf(fi,"%d%d%d",&n,&m,&k);
k--;
for(i=0;i<n;i++)
{
fscanf(fi,"%d",&dist[i]);
}
for(i=0;i<m;i++){
fscanf(fi,"%d%d%d",&a,&b,&c);
c=-c;
a--;
b--;
v[a][0].push_back(b);
v[a][1].push_back(c);
v[b][0].push_back(a);
v[b][1].push_back(c);
}
h.push({0,k});
while(h.empty()==0){
nd=h.top().second;
if(best[nd]==1){
val=h.top().first;
best[nd]=val;
for(i=0;i<v[nd][0].size();i++){
h.push({v[nd][1][i] + val, v[nd][0][i]});
}
}
h.pop();
}
rsp=check(n);
if(rsp==1)
fprintf(fo,"DA\n");
else fprintf(fo,"NU\n");
}
fclose(fi);
fclose(fo);
return 0;
}