Pagini recente » Cod sursa (job #1605371) | Cod sursa (job #2320563) | Cod sursa (job #2447596) | Cod sursa (job #677454) | Cod sursa (job #1894878)
#include<stdio.h>
#include<vector>
#include<queue>
#include<utility>
using namespace std;
int n,m,nods;
priority_queue< pair<int, int>, vector<pair<int, int> >, greater < pair <int, int > > > heap;
vector<pair<int,int> >lista[50001];
int dist[50001],distante[50001];
void citire(){
int i,a,b,c;
scanf("%d%d%d",&n,&m,&nods);
for(i=1;i<=n;i++)
scanf("%d",&distante[i]);
for(i=1;i<=m;i++){
scanf("%d%d%d",&a,&b,&c);
lista[a].push_back(make_pair(c,b));
lista[b].push_back(make_pair(c,a));
}
}
void dijkstra(int nod){
int i,pp,from,d,to,edge;
heap.push(make_pair(0,nod));
for(i=1;i<=n;i++)
dist[i]=999999999;
dist[nod]=0;
while(!heap.empty()){
pp=1;
from=heap.top().second;
d=heap.top().first;
heap.pop();
if(dist[from]!=d)
pp=0;
for(i=0;i<lista[from].size()&&pp==1;i++){
to=lista[from][i].second;
edge=lista[from][i].first;
if(dist[to]>d+edge){
dist[to]=d+edge;
heap.push(make_pair(d+edge,to));
}
}
}
}
int main(){
int T,l,i,pp;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&T);
for(l=1;l<=T;l++){
citire();
dijkstra(nods);
pp=1;
for(i=1;i<=n&&pp==1;i++)
if(dist[i]!=distante[i])
pp=0;
if(pp==1)
printf("DA\n");
else
printf("NU\n");
}
return 0;
}