Pagini recente » Cod sursa (job #1874437) | Cod sursa (job #1285502) | Cod sursa (job #2014603) | Cod sursa (job #1427424) | Cod sursa (job #2040720)
#include <fstream>
#include <vector>
#include <set>
#define inf 10000000001LL
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
int T,N,M,i,t,S,x,y,c,d[100001];
vector <int> bron;
vector <pair<int,int> > L[50001];
multiset <pair<int,int> > s;
int main(){
fin>>T;
for(t=1;t<=T;t++){
fin>>N>>M>>S;
for(i=1;i<=N;i++){
fin>>x;
bron.push_back(x);
d[i]=inf;
}
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));
}
d[S]=0;
s.insert(make_pair(0,S));
while(!s.empty()){
x=s.begin()->second;
s.erase(s.begin());
for(vector <pair<int,int> > :: iterator it=s.begin();it!=s.end();it++){
dist=it->first;
nodv=it->first;
if(d[nodv]<d[x]+dist){
s.erase(make_pair(d[nodv],nodv));
d[nodv]=d[x]+dist;
s.insert(make_pair(d[nodv],nodv));
}
}
}
ok=1;
for(i=1;i<=n;i++){
if(bron[i]!=d[i])
ok=0;
}
if(ok)
fout<<"DA\n";
else
fout<<"NU\n";
bron.erase();
}
return 0;
}