Pagini recente » Cod sursa (job #2260245) | Cod sursa (job #1617941) | Cod sursa (job #986736) | Cod sursa (job #2443212) | Cod sursa (job #866470)
Cod sursa(job #866470)
#include<fstream>
#include<queue>
#include<vector>
using namespace std;
ifstream f("distante.in"); ofstream g("distante.out");
const int NMAX = 50001;
const int INF = 100000000;
int t, n, m, varf;
long long bcp[NMAX], sol[NMAX];
struct nod
{
int v;
int c;
nod(){};
nod(int a, int b)
{
v = a;
c = b;
};
};
vector<nod> v[NMAX];
queue<int> q;
inline void read_data();
inline void cmp_data();
inline void solve(int);
int main()
{
f>>t;
while(t--)
{
read_data();
solve(varf);
cmp_data();
}
g.close();
return 0;
}
inline void read_data()
{
f>>n>>m>>varf;
int x, y, cost;
for(int i = 1; i <= n; ++i) f>>bcp[i], sol[i] = INF;
for(int 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(int 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(int i = 1; i <= n; ++i)
{
if(sol[i] == INF) sol[i] = 0;
if(sol[i] != bcp[i])
{
g<<"NU"<<'\n';
return;
}
}
g<<"DA"<<'\n';
}