Pagini recente » Cod sursa (job #2165610) | Cod sursa (job #2165530) | Cod sursa (job #2878816) | Cod sursa (job #1076493) | Cod sursa (job #3223237)
#include <stdio.h>
#include <vector>
#define N 50000
#define INF (1LL << 62)
int dis[1 + N];
bool exista_drum[1 + N];
int n, m;
bool exista_drumuri() {
for ( int i = 1; i <= n; i ++ )
if ( !exista_drum[i] )
return false;
return true;
}
int main() {
FILE *fin, *fout;
int t, s, x, y, c;
fin = fopen("distante.in", "r");
fout = fopen("distante.out", "w");
fscanf(fin, "%d", &t);
while ( t -- ) {
fscanf(fin, "%d%d%d", &n, &m, &s);
for ( int i = 1; i <= n; i ++ ) {
fscanf(fin, "%d", &dis[i]);
exista_drum[i] = false;
}
exista_drum[s] = true;
bool ok = true;
for ( int i = 1; i <= m; i ++ ) {
fscanf(fin, "%d%d%d", &x, &y, &c);
if ( dis[x] + c < dis[y] ) {
ok = false;
break;
}
else if ( dis[x] + c == dis[y] ) {
exista_drum[y] = true;
}
}
if ( ok && dis[s] == 0 && exista_drumuri() )
fprintf(fout, "DA\n");
else
fprintf(fout, "NU\n");
}
fclose(fin);
fclose(fout);
return 0;
}