Pagini recente » Cod sursa (job #747965) | Cod sursa (job #3128838) | Cod sursa (job #2091381) | Cod sursa (job #27899) | Cod sursa (job #536184)
Cod sursa(job #536184)
#include <stdio.h>
#define INF 1<<20
#include <vector>
using namespace std;
typedef struct {int v,c;} NOD;
NOD q;
int t,i,z;
int n,m,v;
int a,b,c,ok;
int R[50001],C[1<<18],COST[1<<18];
vector <NOD> A[50001];
FILE *f,*g;
void bf(int v)
{
int p=0,u=0;
int x,r,varf,cost;
p++;
u++;
C[p]=v;
while (p<=u)
{
x=C[p++];
for (r=0;r<A[x].size();++r)
{
varf=A[x][r].v;
cost=A[x][r].c;
if (COST[x]+cost>=COST[varf])
continue;
C[++u]=varf;
COST[varf]=COST[x]+cost;
}
}
}
int main()
{
f=fopen("distante.in","r");
g=fopen("distante.out","w");
fscanf(f,"%d",&t);
for (z=1;z<=t;++z)
{
fscanf(f,"%d %d %d",&n,&m,&v);
for (i=1;i<=n;++i)
fscanf(f,"%d",&R[i]);
for (i=1;i<=m;++i)
A[i].clear();
for (i=1;i<=n;++i)
{
COST[i]=INF;
C[i]=0;
}
COST[v]=0;
for (i=1;i<=m;++i)
{
fscanf(f,"%d %d %d",&a,&b,&c);
q.v=b;
q.c=c;
A[a].push_back(q);
q.v=a;
A[b].push_back(q);
}
bf(v);
ok=1;
for (i=1;i<=n;++i)
if (R[i]!=COST[i])
{
ok=0;
break;
}
if (ok)
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
fclose(f);
fclose(g);
return 0;
}