Pagini recente » Cod sursa (job #496228) | Cod sursa (job #3274726) | Cod sursa (job #668236) | Cod sursa (job #3275721) | Cod sursa (job #2679214)
#include <fstream>
#include <vector>
#include <set>
#define INF 2000000000
using namespace std;
vector <pair<int, int> >L[50010];
set <pair<long long, int> >s;
int n,m,i,x,y,c,st,k,ok,t,T;
int D[100010],verifD[50010],dc[50010];
int main() {
ifstream fin("distante.in");
ofstream fout("distante.out");
fin>>T;
for (t=1;t<=T;t++){
fin>>n>>m>>st;
for (i=1;i<=n;i++){
fin>>verifD[i];
}
for (i=1;i<=m;i++) {
fin>>x>>y>>c;
L[x].push_back(make_pair(y,c));
L[y].push_back(make_pair(x,c));
}
for (i=1;i<=n;i++){
D[i]=INF;
}
D[st]=0;
s.insert(make_pair(0,st));
while (!s.empty()){
k=s.begin()->second;
s.erase(s.begin());
for (i=0;i<L[k].size();i++){
if (D[L[k][i].first]>D[k]+L[k][i].second){
s.erase ( make_pair(D[L[k][i].first],L[k][i].first));
D[L[k][i].first]=D[k]+L[k][i].second;
s.insert (make_pair(D[L[k][i].first],L[k][i].first));
}
}
}
ok=1;
for (i=1;i<=n;i++){
if (D[i]!=verifD[i]){
ok=0;
break;
}
}
if (ok==0){
fout<<"NU\n";
}
else{
fout<<"DA\n";
}
for (i=1;i<=n;i++){
L[i].clear();
}
}
return 0;
}