Pagini recente » Cod sursa (job #2869725) | Cod sursa (job #2394967) | Cod sursa (job #837557) | Cod sursa (job #1769728) | Cod sursa (job #1808263)
#include <bits/stdc++.h>
using namespace std;
const int N=50005,Inf=(1<<30);
int v[N],dist[N];
typedef pair<int, int> ii;
vector <ii> G[N];
priority_queue <ii, vector<ii>, greater<ii> > pq;
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
int i,j,d,y,x,t,n,m,rad,a,b,c;
scanf("%d",&t);
for(i=1;i<=t;i++){
scanf("%d%d%d",&n,&m,&rad);
for(j=1;j<=n;j++){
scanf("%d",&v[j]);
dist[j]=Inf;
}
for(j=1;j<=m;j++){
scanf("%d%d%d",&a,&b,&c);
G[a].push_back(ii(b,c));
G[b].push_back(ii(a,c));
}
dist[rad]=0;
pq.push(ii(0,rad));
while(!pq.empty()){
d=pq.top().first;
x=pq.top().second;
pq.pop();
if(d>dist[x]) continue;
for(j=0;j<(int)G[x].size();j++){
y=G[x][j].first;
d=G[x][j].second;
if(dist[x]+d < dist[y]){
dist[y]=dist[x]+d;
pq.push(ii(dist[y],y));
}
}
}
bool sem=0;
for(j=1;j<=n;j++)
if(dist[j]!=v[j]) sem=1;
if(sem==1) printf("NU\n");
else printf("DA\n");
for(j=1;j<=n;j++)
while(G[j].size()) G[j].pop_back();
}
return 0;
}