Pagini recente » Cod sursa (job #965702) | Cod sursa (job #2736759) | Cod sursa (job #1218916) | Cod sursa (job #669705) | Cod sursa (job #2866654)
#include<bits/stdc++.h>
#define INF 100000000
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int t,n,m,a[50002],d[50002];
vector< pair<int,int> >v[50002];
queue<int>q;
void dijkstra(int nodsursa)
{
int i;
for(i=1;i<=n;i++)
d[i]=INF;
d[nodsursa]=0;
q.push(nodsursa);
while(!q.empty())
{
int nod=q.front();
q.pop();
for(auto it:v[nod])
{
int nod1=it.first;
int dist=it.second;
if(d[nod1]>d[nod]+dist)
{
d[nod1]=d[nod]+dist;
q.push(nod1);
}
}
}
}
int main()
{
int i,l,nodsursa,x,y,z,ok;
f>>t;
for(l=1; l<=t; l++)
{
f>>n>>m>>nodsursa;
for(i=1; i<=n; i++)
f>>a[i];
for(i=1; i<=m; i++)
{
f>>x>>y>>z;
v[x].push_back(make_pair(y,z));
v[y].push_back(make_pair(x,z));
}
dijkstra(nodsursa);
for(i=1;i<=n;i++)
{
if(d[i]==INF)
d[i]=0;
}
ok=0;
for(i=1;i<=n;i++)
{
if(a[i]!=d[i])
{
ok=1;
break;
}
}
if(ok==1)
g<<"NU"<<'\n';
else
g<<"DA"<<'\n';
}
return 0;
}