Pagini recente » Cod sursa (job #1584184) | Cod sursa (job #2197907) | Cod sursa (job #902826) | Cod sursa (job #3275895) | Cod sursa (job #2201926)
#include <bits/stdc++.h>
#define INF 1e9
#define pii pair<int,int>
using namespace std;
vector<pii>nod[50000];
vector<int>bronz;
int mn[50005];
deque<pii>dq;
int x,y,cost,n,m,s,val,t;
void solve()
{
while(!dq.empty())
{
int cost=dq.front().second;
int pos=dq.front().first;
dq.pop_front();
for(vector<pii>::iterator it=nod[pos].begin();it!=nod[pos].end();it++)
{
if(mn[it->first]<=cost+it->second)
continue;
mn[it->first]=cost+it->second;
dq.push_back({it->first,mn[it->first]});
}
}
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d\n",&t);
for(int i=1;i<=t;i++)
{
for(int j=1;j<=n;j++)
nod[j].resize(0);
scanf("%d %d %d\n",&n,&m,&s);
bronz.resize(0);
for(int j=1;j<=n;j++)
mn[j]=INF;
mn[s]=0;
for(int j=1;j<=n;j++)
{
scanf("%d ",&val);
bronz.push_back(val);
}
scanf("\n");
for(int j=1;j<=m;j++)
{
scanf("%d %d %d\n",&x,&y,&cost);
nod[x].push_back({y,cost});
nod[y].push_back({x,cost});
}
dq.push_back({s,0});
solve();
bool k=1;
int j;
for(j=1;j<=n;j++)
if(mn[j]!=bronz[j-1])
{
k=0;
break;
}
if(k)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}