/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
Scanner scanner
= new Scanner
(System.
in);
int n = scanner.nextInt();
int m = scanner.nextInt();
for (int i = 0; i <= n; i++) {
adj[i] = new ArrayList<>();
}
int[] nodeValues = new int[n + 1];
for (int i = 1; i <= n; i++) {
nodeValues[i] = scanner.nextInt();
}
for (int i = 0; i < m; i++) {
int u = scanner.nextInt();
int v = scanner.nextInt();
adj[u].add(v);
adj[v].add(u);
}
scanner.close();
solve(n, adj, nodeValues);
}
public static void solve(int n, List<Integer>[] adj, int[] values) {
int[] dist = new int[n + 1];
int[] maxFives = new int[n + 1];
Queue<Integer> queue = new LinkedList<>();
dist[1] = 0;
maxFives[1] = (values[1] == 5) ? 1 : 0;
queue.add(1);
while (!queue.isEmpty()) {
int u = queue.poll();
for (int v : adj[u]) {
int vFives = (values[v] == 5) ? 1 : 0;
if (dist[v] == -1) {
dist[v] = dist[u] + 1;
maxFives[v] = maxFives[u] + vFives;
queue.add(v);
}
else if (dist[v] == dist[u] + 1) {
int newFivesCount = maxFives[u] + vFives;
maxFives
[v
] = Math.
max(maxFives
[v
], newFivesCount
); }
}
}
System.
out.
println("Results (Shortest Path Length + Max Fives):"); for (int i = 1; i <= n; i++) {
if (dist[i] == -1) {
System.
out.
println("Node " + i
+ ": Not Reachable"); } else {
int result = dist[i] + maxFives[i];
System.
out.
println("Node " + i
+ ": " + result
+ " (dist=" + dist
[i
] + ", maxFives=" + maxFives
[i
] + ")"); }
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKICAgICAgICBTY2FubmVyIHNjYW5uZXIgPSBuZXcgU2Nhbm5lcihTeXN0ZW0uaW4pOwoKICAgICAgICBpbnQgbiA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgIGludCBtID0gc2Nhbm5lci5uZXh0SW50KCk7CgogICAgICAgIExpc3Q8SW50ZWdlcj5bXSBhZGogPSBuZXcgQXJyYXlMaXN0W24gKyAxXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgYWRqW2ldID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGludFtdIG5vZGVWYWx1ZXMgPSBuZXcgaW50W24gKyAxXTsKCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIG5vZGVWYWx1ZXNbaV0gPSBzY2FubmVyLm5leHRJbnQoKTsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgICAgICAgaW50IHUgPSBzY2FubmVyLm5leHRJbnQoKTsKICAgICAgICAgICAgaW50IHYgPSBzY2FubmVyLm5leHRJbnQoKTsKICAgICAgICAgICAgYWRqW3VdLmFkZCh2KTsKICAgICAgICAgICAgYWRqW3ZdLmFkZCh1KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc2Nhbm5lci5jbG9zZSgpOwogICAgICAgIHNvbHZlKG4sIGFkaiwgbm9kZVZhbHVlcyk7Cgl9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgc29sdmUoaW50IG4sIExpc3Q8SW50ZWdlcj5bXSBhZGosIGludFtdIHZhbHVlcykgewogICAgICAgIGludFtdIGRpc3QgPSBuZXcgaW50W24gKyAxXTsKICAgICAgICBBcnJheXMuZmlsbChkaXN0LCAtMSk7CgogICAgICAgIGludFtdIG1heEZpdmVzID0gbmV3IGludFtuICsgMV07CgogICAgICAgIFF1ZXVlPEludGVnZXI+IHF1ZXVlID0gbmV3IExpbmtlZExpc3Q8PigpOwoKICAgICAgICBkaXN0WzFdID0gMDsKICAgICAgICBtYXhGaXZlc1sxXSA9ICh2YWx1ZXNbMV0gPT0gNSkgPyAxIDogMDsKICAgICAgICBxdWV1ZS5hZGQoMSk7CgogICAgICAgIHdoaWxlICghcXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgIGludCB1ID0gcXVldWUucG9sbCgpOwoKICAgICAgICAgICAgZm9yIChpbnQgdiA6IGFkalt1XSkgewogICAgICAgICAgICAgICAgaW50IHZGaXZlcyA9ICh2YWx1ZXNbdl0gPT0gNSkgPyAxIDogMDsKCiAgICAgICAgICAgICAgICBpZiAoZGlzdFt2XSA9PSAtMSkgewogICAgICAgICAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgMTsKICAgICAgICAgICAgICAgICAgICBtYXhGaXZlc1t2XSA9IG1heEZpdmVzW3VdICsgdkZpdmVzOwogICAgICAgICAgICAgICAgICAgIHF1ZXVlLmFkZCh2KTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICBlbHNlIGlmIChkaXN0W3ZdID09IGRpc3RbdV0gKyAxKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IG5ld0ZpdmVzQ291bnQgPSBtYXhGaXZlc1t1XSArIHZGaXZlczsKICAgICAgICAgICAgICAgICAgICBtYXhGaXZlc1t2XSA9IE1hdGgubWF4KG1heEZpdmVzW3ZdLCBuZXdGaXZlc0NvdW50KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXN1bHRzIChTaG9ydGVzdCBQYXRoIExlbmd0aCArIE1heCBGaXZlcyk6Iik7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIGlmIChkaXN0W2ldID09IC0xKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk5vZGUgIiArIGkgKyAiOiBOb3QgUmVhY2hhYmxlIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gZGlzdFtpXSArIG1heEZpdmVzW2ldOwogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJOb2RlICIgKyBpICsgIjogIiArIHJlc3VsdCArICIgKGRpc3Q9IiArIGRpc3RbaV0gKyAiLCBtYXhGaXZlcz0iICsgbWF4Rml2ZXNbaV0gKyAiKSIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9
Results (Shortest Path Length + Max Fives):
Node 1: 0 (dist=0, maxFives=0)
Node 2: 1 (dist=1, maxFives=0)
Node 3: 1 (dist=1, maxFives=0)
Node 4: 2 (dist=2, maxFives=0)
Node 5: 3 (dist=2, maxFives=1)
Node 6: 4 (dist=3, maxFives=1)