Pagini recente » Cod sursa (job #3243635) | Cod sursa (job #95617) | Cod sursa (job #227268) | Cod sursa (job #2734379) | Cod sursa (job #1987900)
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int nmax=50005;
typedef pair<int,int> ii;
vector<ii>g[nmax];
int deverif[nmax],ans[nmax];
queue<int> q;
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int m,x,c,y,n,i,j,t,s;
scanf("%d",&t);
while(t)
{
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++)
scanf("%d",&deverif[i]);
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&x,&y,&c);
g[x].push_back(ii(y,c));
g[y].push_back(ii(x,c));
}
q.push(s);
for(i=1;i<=n;i++)
ans[i]=-1;
ans[s]=0;
int node,current,sz;
while(!q.empty())
{
node=q.front();
sz=g[node].size();
q.pop();
for(i=0;i<sz;++i)
{
current=g[node][i].first;
if(ans[current]==-1)
{
ans[current]=ans[node]+g[node][i].second;
q.push(current);
}
}
}
bool a=1;
for(i=1;i<=n;i++)
if(deverif[i]!=ans[i])
{
a=0;
break;
}
if(a)
printf("DA\n");
else
printf("NU\n");
t--;
}
}