Pagini recente » Cod sursa (job #1648591) | Cod sursa (job #745162) | Cod sursa (job #2664967) | Cod sursa (job #2135466) | Cod sursa (job #2371199)
#include <stdio.h>
#include <queue>
#include <string.h>
#include <vector>
using namespace std;
vector <pair <int, int> > v[50005];
int use[50005],d[50005];
int t,k,n,m,s,i,d2[50005];
priority_queue <pair<int, int>, vector<pair <int,int> >, greater <pair <int, int> > > h;
void dijkstra(){
int j,i,x,y,z;
for(i=1;i<=n;i++)
v[i].clear();
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(make_pair(z,y));
v[y].push_back(make_pair(z,x));
}
//for(i=1;i<=n;i++) printf("%d ",v[i].size());
for(i=1;i<=n;i++) d[i]=1e9;
d[s]=0;
memset(use,0,sizeof(use));
h.push(make_pair(0,s));
while(!h.empty()){
int nod=h.top().second;
h.pop();
if(!use[nod]){
for(i=0;i<v[nod].size();i++)
if(v[nod][i].first+d[nod]<d[v[nod][i].second])
{d[v[nod][i].second]=v[nod][i].first+d[nod];
h.push(make_pair(d[v[nod][i].second],v[nod][i].second));
}
use[nod]=1;
}
}
int ok=1;
for(i=1;i<=n;i++) if(d[i]!=d2[i]) ok=0;
//for(i=1;i<=n;i++) printf("%d ",d[i]);
if(ok==1) printf("DA\n");
else printf("NU\n");
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(k=1;k<=t;k++){
scanf("%d%d%d",&n,&m,&s);
for(i=1;i<=n;i++) scanf("%d",&d2[i]);
dijkstra();
}
return 0;
}