Pagini recente » Cod sursa (job #1887596) | Cod sursa (job #1104322) | Cod sursa (job #2581511) | Cod sursa (job #309681) | Cod sursa (job #2656536)
#include <fstream>
#include <algorithm>
#include <climits>
#include <vector>
#include <deque>
#define dim 50010
using namespace std;
vector<pair<int,int> >a[dim];
deque<int> c;
int f[dim];
int sol[dim];
int d[dim];
int i,n,m,t,s,cost,nod,vecin,ok,x,y;
int main() {
ifstream fin("distante.in");
ofstream fout("distante.out");
fin>>t;
for (;t--;) {
c.clear();
fin>>n>>m>>s;
for (i=1;i<=n;i++) {
fin>>sol[i];
}
for (i=1;i<=m;i++) {
fin>>x>>y>>cost;
a[x].push_back({y,cost});
a[y].push_back({x,cost});
}
c.push_back(s);
for (i=1;i<=n;i++) {
d[i]=INT_MAX;
}
d[s]=0;
f[s]=1;
while (c.empty()!=1) {
nod=c.front();
for (i=0;i<a[nod].size();i++) {
vecin=a[nod][i].first;
cost=a[nod][i].second;
if (d[vecin]>d[nod]+cost) {
d[vecin]=d[nod]+cost;
if (f[vecin]==0) {
f[vecin]=1;
c.push_back(vecin);
}
}
}
f[nod]=0;
c.pop_front();
}
ok=1;
for (i=1;i<=n;i++) {
if (d[i]!=sol[i]) {
ok=0;
fout<<"NU"<<"\n";
break;
}
}
if (ok) fout<<"DA"<<"\n";
for (i=1;i<=n;i++) {
a[i].clear();
f[i]=0;
}
}
return 0;
}