Pagini recente » Cod sursa (job #2347017) | Cod sursa (job #648597) | Cod sursa (job #3142681) | Cod sursa (job #2560584) | Cod sursa (job #2751103)
#include <bits/stdc++.h>
#define NMAX 100005
#define ff first
#define ss second
#define pb push_back
using namespace std;
typedef long long ll;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector < pair < int, int > > v[NMAX];
int d[NMAX], dist[NMAX],S, n, m, c, x,y ,T;
queue <int> Q;
bool viz[NMAX];
void bfs()
{
int nodv, cost, nod;
Q.push(S);
viz[S]=1;
d[S]=0;
while(Q.size())
{
nod = Q.front();
Q.pop();
viz[nod]=0;
for(auto vec : v[nod])
{
nodv = vec.ff;
cost = vec.ss;
//cout << nod << " " <<nodv << ";;;" ;
if(d[nodv] == -1) {
d[nodv] = d[nod] + cost;
viz[nodv] = 1;
Q.push(nodv);
}
else{
if(d[nodv] > d[nod]+cost)
{
d[nodv] = d[nod] + cost;
if(!viz[nodv]) Q.push(nodv), viz[nodv]=1;
}
}
}
}
}
int main() {
fin >> T;
for(T; T>0;T--)
{
fin >> n >> m >>S;
for(int i=1;i<=n;++i)
d[i]=-1;
for(int i=1;i<=n;++i)
fin >> dist[i];
for(int i = 1;i<=m;++i)
{
fin >> x >> y >> c;
v[x].pb({y,c});
v[y].pb({x,c});
}
bfs();
//for(int i=1;i<=n;++i)
// cout << d[i] << " ";
//cout << "\n";
int ok = 1;
for(int i=1;i<=n;++i)
if(d[i]!=dist[i]) ok=0;
if(ok==1) fout << "DA\n";
else fout << "NU\n";
for(int i=1;i<=n;++i)
v[i].clear();
}
return 0;
}