Pagini recente » Cod sursa (job #1106274) | Cod sursa (job #1888566) | Cod sursa (job #111809) | Cod sursa (job #2529630) | Cod sursa (job #291)
Cod sursa(job #291)
#include<stdio.h>
FILE *fin,*fout;
long a[50000][100];
long b[50000][100];
long d[50001] , i , j , n , m , nodd , x,y,z,q , nr=0;
long cit[50001];
long v;
long c[50001],t,k,kkt,ind;
long indici[50001] ;
long bif[50001];
int main()
{
fin = fopen("distante.in","r");
fout = fopen("distante.out","w");
fscanf(fin,"%ld",&t);
for (q = 1 ; q <= t;q++)
{
nr = 0;
fscanf(fin,"%ld%ld%ld",&n,&m,&nodd);
for (i = 1 ; i<= n ; i++)
{
fscanf(fin,"%ld",&cit[i]);
bif[i] = 0;
c[i] = i;
d[i] = 0;
indici[i] = i;
}
if (q!=1)
for (i = 1 ; i<= n ; i++) a[i][0] = 0 , b[i][0] = 0;
for (i = 1 ; i<= m;i++)
{
fscanf(fin,"%ld%ld%ld",&x,&y,&z);
a[x][0]++;
a[x][a[x][0]] = y;
b[x][0]++;
b[x][b[x][0]] = z;
a[y][0]++;
a[y][a[y][0]] = x;
b[y][0]++;
b[y][b[y][0]] = z;
}
ind = 1;
if (cit[nodd]!=0)
{
ind = 0 ;
}
bif[nodd] = 1;
for (i = 1 ; i<= n ; i++)
{
for (j = 1 ; j<= a[i][0] ; j++)
{
if (cit[i] + b[i][j] < cit[a[i][j]])
ind = 0 ;// i = n+1 , j = a[i][0]+1;
if (cit[i] + b[i][j] == cit[a[i][j]] &&a[i][j] !=nodd)
bif[a[i][j]] = 1;
}
}
for (i = 1 ; i<= n ; i++)
if (bif[i]==0){
ind = 0 ; break;}
if (ind==1)
{
fprintf(fout,"DA\n");
}
else
fprintf(fout,"NU\n");
}
return 0;
}