Pagini recente » Cod sursa (job #1298803) | Cod sursa (job #2950531) | Cod sursa (job #754157) | Cod sursa (job #3179939) | Cod sursa (job #2890887)
#import<fstream>
#import<vector>
#import<algorithm>
#import<cstring>
#import<queue>
#import<unordered_set>
#import<string>
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
struct sortt
{
bool operator()(pair<int,int>a,pair<int,int>b)
{
return (a.first>=b.first);
}
};
main()
{
int tt;
cin>>tt;
while(tt--)
{
vector<vector<pair<int,int>>>a;
int n,m,s;
cin>>n>>m>>s;
vector<int>rez,r;
a.resize(n+1);
rez.resize(n+1);
r.resize(n+1);
for(int i=1;i<=n;i++)
{
cin>>r[i];
rez[i]=2e9;
}
rez[s]=0;
for(int i=1;i<=m;i++)
{
int x,y,z;
cin>>x>>y>>z;
a[x].push_back({z,y});
a[y].push_back({z,x});
}
priority_queue<pair<int,int>,vector<pair<int,int>>,sortt>q;
q.push({0,s});
while(!q.empty())
{
auto c=q.top();
q.pop();
int slast=c.first,last=c.second;
if(slast!=rez[last])
{
continue;
}
for(auto v:a[last])
{
if(rez[v.second]>slast+v.first)
{
rez[v.second]=slast+v.first;
q.push({rez[v.second],v.second});
}
}
}
bool ok=1;
for(int i=1;i<=n;i++)
{
if(rez[i]==2e9)
{
rez[i]=0;
}
if(rez[i]!=r[i])
{
ok=0;
}
}
if(ok)
{
cout<<"DA";
}
else
{
cout<<"NU";
}
cout<<'\n';
}
}