Pagini recente » Cod sursa (job #1378082) | Cod sursa (job #706476) | Cod sursa (job #1058176) | Cod sursa (job #1123766) | Cod sursa (job #798001)
Cod sursa(job #798001)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int inf=16000000;
const int maxn=50001;
vector< pair<int, int> >::iterator it;
vector< pair<int, int> > v[maxn];
queue<int> q;
int t, x, y, z, n, m, s, i, d[maxn], a[maxn];
bool block[maxn];
void compute(int s)
{
int x;
d[s]=0;
q.push(s);
while(!q.empty())
{
x=q.front();
q.pop();
block[x]=0;
for(it=v[x].begin(); it!=v[x].end(); ++it)
if(d[it->first] > it->second + d[x])
{
d[it->first] = it->second + d[x];
if(!block[it->first])
{
q.push(it->first);
block[it->first]=1;
}
}
}
}
int main()
{
f>>t;
for(; t; --t)
{
f>>n>>m>>s;
for(i=1; i<=n; ++i)
{
f>>a[i];
d[i]=inf;
block[i]=0;
}
for(; m; --m)
{
f>>x>>y>>z;
v[x].push_back(make_pair(y, z));
v[y].push_back(make_pair(x, z));
}
compute(s);
bool ok=1;
for(i=1; i<=n; ++i)
if(d[i]!=a[i]) ok=0;
if(ok==0) g<<"NU\n";
else g<<"DA\n";
}
}