Pagini recente » Cod sursa (job #2813) | PAGINA LUI VI$$U | Cod sursa (job #18217) | Cod sursa (job #2416279) | Cod sursa (job #1754757)
#include <bits/stdc++.h>
using namespace std;
const int oo=0x3f3f3f3f;
using VI=vector<int>;
using VVII=vector<vector<pair<int,int>>>;
VVII G;
VI d,distanta;
int n,m,s,a,b,c,t;
void dijkstra(int sursa)
{
d[sursa]=0;
set<pair<int,int>>s;
s.insert({0,sursa});
while(!s.empty())
{
int nod=s.begin()->second;s.erase(s.begin());
for(auto f:G[nod])
if(d[f.second]>d[nod]+f.first)
{
d[f.second]=d[nod]+f.first;
s.insert({d[f.second],f.second});
}
}
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(;t;--t)
{
scanf("%d %d %d",&n,&m,&s);
G=VVII(n+1);d=VI(n+1,oo);distanta=VI(n+1);
for(int i=1;i<=n;++i)
scanf("%d ",&distanta[i]);
while(m--)
{
scanf("%d %d %d",&a,&b,&c);
G[a].push_back({c,b});
G[b].push_back({c,a});
}
dijkstra(s);
bool itsok=true;
for(int i=1;i<=n && itsok;++i)
if(d[i]!=distanta[i])
itsok=false;
if(itsok==true)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}