Pagini recente » Cod sursa (job #3176552) | Cod sursa (job #2070624) | Cod sursa (job #1258773) | Cod sursa (job #2736137) | Cod sursa (job #2062756)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int T,N,M,S,x,y,c,d[50001],e[50001];
queue <int> coada;
vector <int> G[50001],C[50001];
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&T);
for(int o=1;o<=T;++o){
scanf("%d%d%d",&N,&M,&S);
for(int i=1;i<=N;++i){
scanf("%d",&e[i]);
if(i!=S)d[i]=0x3f3f3f3f;
else d[i]=0;
}
while(M--){
scanf("%d%d%d",&x,&y,&c);
G[x].push_back(y),G[y].push_back(x);
C[x].push_back(c),C[y].push_back(c);
}
coada.push(S);
while(!coada.empty()){
x=coada.front();
coada.pop();
for(int i=0;i<G[x].size();++i)
if(d[G[x][i]]>d[x]+C[x][i]){
d[G[x][i]]=d[x]+C[x][i];
coada.push(G[x][i]);
}
}
bool ok=1;
for(int i=1;i<=N&&ok;++i)
if(d[i]!=e[i])
ok=0;
if(ok)printf("DA\n");
else printf("NU\n");
}
return 0;
}