Pagini recente » Cod sursa (job #2335041) | Cod sursa (job #327546) | Cod sursa (job #2885737) | Cod sursa (job #1875991) | Cod sursa (job #866473)
Cod sursa(job #866473)
#include<fstream>
#include<queue>
#include<vector>
#define LL long long
using namespace std;
ifstream f("distante.in"); ofstream g("distante.out");
const LL NMAX = 50001;
long long INF = 1000000000;
LL t, n, m, varf;
long long bcp[NMAX], sol[NMAX];
struct nod
{
LL v;
LL c;
nod(){};
nod(LL a, LL b)
{
v = a;
c = b;
};
};
vector<nod> v[NMAX];
queue<LL> q;
inline void read_data();
inline void cmp_data();
inline void solve(LL);
int main()
{
INF = INF * INF;
f>>t;
while(t--)
{
read_data();
solve(varf);
cmp_data();
}
g.close();
return 0;
}
inline void read_data()
{
f>>n>>m>>varf;
LL x, y, cost;
for(LL i = 1; i <= n; ++i) f>>bcp[i], sol[i] = INF;
for(LL i = 1; i <= m; ++i)
{
f>>x>>y>>cost;
v[x].push_back(nod(y, cost));
v[y].push_back(nod(x, cost));
}
}
inline void solve(LL k)
{
q.push(k);
sol[k] = 0;
while(!q.empty())
{
k = q.front(), q.pop();
vector<nod>::iterator it;
for(it = v[k].begin(); it != v[k].end(); ++it)
{
if((*it).c + sol[k] < sol[(*it).v])
{
sol[(*it).v] = (*it).c + sol[k];
q.push((*it).v);
}
}
}
}
inline void cmp_data()
{
for(LL i = 1; i <= n; ++i)
{
if(sol[i] == INF) sol[i] = 0;
if(sol[i] != bcp[i])
{
g<<"NU"<<'\n';
return;
}
}
g<<"DA"<<'\n';
}