Pagini recente » Cod sursa (job #2491545) | Cod sursa (job #2392352) | Cod sursa (job #785546) | Cod sursa (job #1119805) | Cod sursa (job #2040038)
#include <fstream>
#include <vector>
#include <bitset>
#define INF 2000000000
#define DIM 50001
using namespace std;
ifstream fin ("distante.in");
ofstream fout ("distante.out");
int n,m,S,i,t,ok,a,b,c,v[DIM],d[DIM];
vector < pair<int,int> > L[DIM];
bitset <DIM> f;
void dfs (int nod){
f[nod] = 1;
for (int i=0;i<L[nod].size();i++){
int vecin = L[nod][i].first;
if (f[vecin] == 0){
d[vecin] = min (d[vecin],d[nod] + L[nod][i].second);
dfs (vecin);
}
}
}
int main (){
fin>>t;
for (;t--;){
fin>>n>>m>>S;
for (i=1;i<=n;i++){
fin>>v[i];
d[i] = INF;
}
d[S] = 0;
for (i=1;i<=m;i++){
fin>>a>>b>>c;
L[a].push_back(make_pair(b,c));
L[b].push_back(make_pair(a,c));
if (a == S)
d[b] = c;
else
if (b == S)
d[a] = c;
}
f.reset();
dfs (S);
ok = 0;
for (i=1;i<=n;i++)
if (v[i] != d[i]){
ok = 1;
break;
}
if (ok == 0)
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}