Pagini recente » Cod sursa (job #3178961) | Cod sursa (job #1757920) | Cod sursa (job #599831) | Cod sursa (job #549416) | Cod sursa (job #2041065)
#include <fstream>
#include <vector>
#include <set>
#define inf 100000001LL
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
int T,n,m,i,t,S,x,y,c,dist,nodv,ok,d[50001],bron[50001];
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>>bron[i];
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=L[x].begin();it!=L[x].end();it++){
nodv=it->first;
dist=it->second;
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(d[i]!=bron[i])
ok=0;
}
if(ok)
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}