Pagini recente » Cod sursa (job #1794973) | Cod sursa (job #1104750) | Cod sursa (job #1415589) | Cod sursa (job #1926049) | Cod sursa (job #3296566)
import java.io.*;
import java.util.*;
public class Main {
static class Task {
public static final String INPUT_FILE = "distante.in";
public static final String OUTPUT_FILE = "distante.out";
private static final int INF = (int)1e9;
public void solve() {
try (
Scanner sc = new Scanner(new FileReader(INPUT_FILE));
PrintWriter pw = new PrintWriter(new FileWriter(OUTPUT_FILE))
) {
int T = sc.nextInt();
for (int tc = 0; tc < T; tc++) {
int N = sc.nextInt();
int M = sc.nextInt();
int S = sc.nextInt();
int[] given = new int[N+1];
for (int i = 1; i <= N; i++) {
given[i] = sc.nextInt();
}
List<int[]>[] adj = new ArrayList[N+1];
for (int i = 1; i <= N; i++) {
adj[i] = new ArrayList<>();
}
for (int i = 0; i < M; i++) {
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
adj[a].add(new int[]{b, c});
adj[b].add(new int[]{a, c});
}
int[] dist = new int[N+1];
boolean[] done = new boolean[N+1];
for (int i = 0; i <= N; i++) dist[i] = INF;
dist[S] = 0;
PriorityQueue<int[]> pq = new PriorityQueue<>(
Comparator.comparingInt(pair -> pair[1])
);
pq.add(new int[]{S, 0});
while (!pq.isEmpty()) {
int[] top = pq.poll();
int u = top[0], du = top[1];
if (done[u]) continue;
done[u] = true;
for (int[] e : adj[u]) {
int v = e[0], w = e[1];
if (!done[v] && du + w < dist[v]) {
dist[v] = du + w;
pq.add(new int[]{v, dist[v]});
}
}
}
boolean ok = true;
for (int i = 1; i <= N; i++) {
if (dist[i] == INF) {
if (given[i] != -1) { ok = false; break; }
} else {
if (given[i] != dist[i]) { ok = false; break; }
}
}
pw.println(ok ? "DA" : "NU");
}
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
}
public static void main(String[] args) {
new Task().solve();
}
}