Pagini recente » Cod sursa (job #1204498) | Rating Alin Dima (alindima99) | Cod sursa (job #1766839) | Rating Zapartan Casandra (casandra) | Cod sursa (job #2980189)
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int d[50003],n,m,viz[50003],cer,dis[50003];
const int inf=1e9+3;
struct cmp
{
bool operator()(int x,int y)
{
return d[x]>d[y];
}
};
priority_queue<int,vector<int>,cmp>q;
inline void dij(int nod,vector <pair<int,int>>v[])
{
for(int i=1;i<=n;i++)
d[i]=inf;
d[nod]=0;
q.push(nod);
viz[nod]=1;
while(!q.empty())
{
int newnod=q.top();
q.pop();
viz[newnod]=0;
for(int i=0;i<v[newnod].size();i++)
{
int vecin=v[newnod][i].first,cost=v[newnod][i].second;
if(d[newnod]+cost<d[vecin])
{
d[vecin]=d[newnod]+cost;
if(viz[vecin]==0)
{
q.push(vecin);
viz[vecin]=1;
}
}
}
}
}
inline int ver(int x)
{
for(int i=1;i<=x;i++)
if(dis[i]!=d[i])
return 0;
return 1;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
f>>cer;
for(int j=1;j<=cer;j++)
{
int nod;
f>>n>>m>>nod;
for(int i=1;i<=n;i++)
f>>dis[i];
vector <pair<int,int>>v[50003];
for(int i=1;i<=m;i++)
{
int x,c,y;
f>>x>>y>>c;
v[x].push_back(make_pair(y,c));
}
dij(nod,v);
if(ver(n)==0)
g<<"NU\n";
else
g<<"DA\n";
}
return 0;
}