Pagini recente » Cod sursa (job #2952155) | Cod sursa (job #198176) | Cod sursa (job #1947231) | Cod sursa (job #596381) | Cod sursa (job #2274207)
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
vector<pair<int,int>> v[50002];
int a[50002],ar[50002];
priority_queue<pair<int,int>> h;
int main()
{
int t,n,m,s,i,nr1,nr2,c,b;
in>>t;
while(t--)
{
in>>n>>m>>s;b=1;
for(i=1;i<=n;i++)
{
in>>ar[i];
a[i]=0;
v[i].clear();
}
for(i=0;i<m;i++)
{
in>>nr1>>nr2>>c;
v[nr1].push_back({c,nr2});
v[nr2].push_back({c,nr1});
}
h.push({-1,s});
while(!h.empty())
{
while(!h.empty()&&a[h.top().y]>0)
h.pop();
if(h.empty())break;
nr1=h.top().y;nr2=-h.top().x;
h.pop();
a[nr1]=nr2;
if(nr2-1!=ar[nr1])
{
b=0;
while(!h.empty())
h.pop();
break;
}
for(auto it:v[nr1])
if(a[it.y]==0||(a[it.y]<0&&-a[it.y]>nr2+it.x))
{
a[it.y]=-nr2-it.x;
h.push({-nr2-it.x,it.y});
}
}
for(i=2;b&&i<=n;i++)
if(max(a[i]-1,0)!=ar[i])
b=0;
if(b)
out<<"DA\n";
else
out<<"NU\n";
}
return 0;
}