Pagini recente » Cod sursa (job #1567871) | Cod sursa (job #3277987) | Cod sursa (job #2583724) | Cod sursa (job #2279713) | Cod sursa (job #2317207)
#include <fstream>
#include <vector>
#include <deque>
#define inf 100000001
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n, t, i, m, rad, a[50001], d[50001], f[50001], c, crt, dist, nod, e, b;
vector<pair<int, int> > v[50001];
deque<int> q;
char ok;
int main(){
fin>>t;
while(t--){
fin>>n>>m>>rad;
for(i=1;i<=n;i++){
fin>>d[i];
a[i] = inf;
}
for(i=1;i<=m;i++){
fin>>e>>b>>c;
v[e].push_back(make_pair(b, c));
}
q.push_back(rad);
f[rad] = 1;
a[rad] = 0;
while(!q.empty()){
nod = q[0];
for(i = 0;i<v[nod].size();i++){
crt = v[nod][i].first;
dist = v[nod][i].second;
if(a[nod] + dist < a[crt]){
a[crt] = a[nod] + dist;
if(f[crt] == 0){
f[crt] = 1;
q.push_back(crt);
}
}
}
q.pop_front();
f[nod] = 0;
}
ok = 0;
for(i=1;i<=n;i++)
if(d[i] != a[i]){
fout<<"NU\n";
ok = 1;
break;
}
for(i=1;i<=n;i++)
a[i] = f[i] = d[i] = 0;
if(ok == 0)
fout<<"DA\n";
for(i=1;i<=n;i++)
v[i].clear();
}
return 0;
}