Pagini recente » Cod sursa (job #2614369) | Cod sursa (job #2136682) | Cod sursa (job #2532179) | Borderou de evaluare (job #3136249) | Cod sursa (job #2627116)
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
const int N=50010;
int t,n,m,s,x,y,c,d[N];
vector <pair<int,int>> v[N];
int main()
{
f>>t;
for(;t;t--)
{ bool da=true;
f>>n>>m>>s;
for(int i=1;i<=n;i++)
f>>d[i];
for(;m;m--)
{
f>>x>>y>>c;
v[x].push_back(make_pair(y,c));
v[y].push_back(make_pair(x,c));
if(d[x]>d[y]+c||d[y]>d[x]+c)
da=false;
}
if(d[s]!=0)
da=false;
for(int i=1;i<=n;i++)
{ if(i!=s)
{int gasit=0;
for(auto it:v[i])
{
int nod,cost;
tie(nod,cost)=it;
if(d[nod]+cost<d[i])
da=false;
if(d[nod]+cost==d[i])
gasit=1;
}
if(gasit==0)
da=false;
}
}
if(da==false)
g<<"NU"<<'\n';
else
g<<"DA"<<'\n';
} return 0;
}