Pagini recente » Cod sursa (job #2940964) | Cod sursa (job #9786) | Cod sursa (job #2118082) | Cod sursa (job #384017) | Cod sursa (job #302064)
Cod sursa(job #302064)
#include<cstdio>
#include<cstring>
using namespace std;
#define INPUT "distante.in"
#define OUTPUT "distante.out"
const long NMAX = 50001;
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
long N, M, S, C;
long D[ NMAX ];
bool viz[ NMAX ];
void readData()
{
long Node1, Node2, C;
memset(viz, 0, sizeof(viz));
fscanf(fin, "%ld %ld %ld", &N, &M, &S);
for(long i = 1; i <= N; ++i)
fscanf(fin, "%ld", &D[ i ]);
if(D[ S ])
{
fprintf(fout, "NU\n");
return;
}
for(long i = 1; i <= M; ++i)
{
fscanf(fin, "%ld %ld %ld", &Node1, &Node2, &C);
if(D[ Node1 ] + C < D[ Node2 ] || D[ Node2 ] + C < D[ Node1 ]){
fprintf(fout, "NU\n");
return;
}
if(D[ Node1 ] + C == D[ Node2 ]) viz[ Node2 ] = 1;
}
for(long i = 1; i <= N; ++i)
if(!viz[ i ] && i != S){
fprintf(fout, "NU\n");
return;
}
fprintf(fout, "DA\n");
}
int main()
{
int T;
fscanf(fin, "%d", &T);
for(;T--;)
{
readData();
}
fclose(fin);
fclose(fout);
return 0;
}