Pagini recente » Cod sursa (job #1346002) | Cod sursa (job #1573976) | Cod sursa (job #2834265) | Cod sursa (job #2379828) | Cod sursa (job #372480)
Cod sursa(job #372480)
# include <cstdio>
# include <iostream>
# include <cstdlib>
using namespace std;
struct nod {
int info;
nod *next;};
int *a[50003], d[50003], n, m, t, s, dd[50003], *c[50003];
int bfs (int s)
{
nod *st, *dr;
int k;
st=dr=new nod;
st->info=s;
st->next=NULL;
d[s]=0;
while (st)
{
k=st->info;
nod *q;
for (int i=1;i<=a[k][0];i++)
if (d[a[k][i]]==-1 || d[k]+c[k][i]<d[a[k][i]])
{
d[a[k][i]]=d[k]+c[k][i];
q=new nod;
q->next=NULL;
q->info=a[k][i];
dr->next=q;
dr=q;
}
if (dd[st->info]!=d[st->info])
return 0;
q=st;
st=st->next;
delete q;
}
return 1;
}
int main ()
{
int i=1, j=1;
FILE *fin=fopen("distante.in", "r");
FILE *fout=fopen("distante.out", "w");
fscanf(fin, "%d", &t);
for (int k=1;k<=t;k++)
{
fscanf(fin, "%d", &n);
fscanf(fin, "%d", &m);
fscanf(fin, "%d", &s);
for (j=1;j<=n;j++)
fscanf(fin, "%d", &dd[j]);
for (i=1;i<=n;i++)
{
c[i]=(int*) malloc(1*4);
a[i]=(int*) malloc(1*4);
a[i][0]=0, d[i]=-1;
}
for (;m;--m)
{
int x, y, q;
fscanf(fin, "%d", &x);
fscanf(fin, "%d", &y);
fscanf(fin, "%d", &q);
a[x][0]++;
c[x]=(int *) realloc(c[x], (a[x][0]+1)*4);
a[x]=(int *) realloc(a[x], (a[x][0]+1)*4);
a[x][a[x][0]]=y;
c[x][a[x][0]]=q;
a[y][0]++;
c[y]=(int *) realloc(c[y], (a[y][0]+1)*4);
a[y]=(int *) realloc(a[y], (a[y][0]+1)*4);
a[y][a[y][0]]=x;
c[y][a[y][0]]=q;
}
int r;
r=bfs(s);
if(r) fprintf(fout, "DA\n");
else fprintf(fout, "NU\n");
}
return 0;
}