Pagini recente » Cod sursa (job #58550) | Cod sursa (job #114641) | Cod sursa (job #529387) | Cod sursa (job #2530532) | Cod sursa (job #2302919)
#include <bits/stdc++.h>
#define NMAX 50005
#define inf 1e9
using namespace std;
FILE*f=fopen("distante.in","r");
FILE*g=fopen("distante.out","w");
vector<pair<int,int> > v[NMAX];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > h;
int n,m,d[NMAX],viz[NMAX],x,y,z,s,nod,d2[NMAX],k;
bool ok;
int main() {
int i,j;
fscanf(f,"%d",&k);
for (j=1;j<=k;j++) {
for (i=1;i<=n;i++) v[i].clear();
fscanf(f,"%d%d%d",&n,&m,&s);
for (i=1;i<=n;i++) fscanf(f,"%d",&d2[i]);
for (i=1;i<=m;i++) {
fscanf(f,"%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++) {
d[i]=inf;
viz[i]=0;
}
d[s]=0;
h.push(make_pair(0,s));
while (!h.empty()) {
nod=h.top().second;
h.pop();
if (!viz[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));
}
}
viz[nod]=1;
}
ok=true;
for (i=1;i<=n && ok;i++)
if (d[i]!=d2[i]) ok=false;
if (ok) fprintf(g,"DA\n");
else fprintf(g,"NU\n");
}
return 0;
}