74 lines
1.5 KiB
Java
74 lines
1.5 KiB
Java
package chelper;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
import java.util.Queue;
|
|
|
|
import io.InputReader;
|
|
import io.OutputWriter;
|
|
|
|
public class L {
|
|
int[] bfs(List<List<Integer>> edges, int from) {
|
|
int n = edges.size();
|
|
int[] res = new int[n];
|
|
Arrays.fill(res, n + 100);
|
|
res[from] = 0;
|
|
|
|
boolean[] visited = new boolean[n];
|
|
visited[from] = true;
|
|
|
|
Queue<Integer> queue = new LinkedList<>();
|
|
queue.add(from);
|
|
|
|
while (!queue.isEmpty()) {
|
|
int a = queue.poll();
|
|
for (int b : edges.get(a)) {
|
|
if (!visited[b]) {
|
|
res[b] = res[a] + 1;
|
|
visited[b] = true;
|
|
queue.add(b);
|
|
}
|
|
}
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
public void solve(int testNumber, InputReader in, OutputWriter out) {
|
|
int n = in.nextInt() + 1;
|
|
int m = in.nextInt();
|
|
|
|
int a = in.nextInt();
|
|
int b = in.nextInt();
|
|
|
|
List<List<Integer>> edges1 = new ArrayList<>();
|
|
List<List<Integer>> edges2 = new ArrayList<>();
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
edges1.add(new ArrayList<>());
|
|
edges2.add(new ArrayList<>());
|
|
}
|
|
|
|
for (int i = 0; i < m; i++) {
|
|
int v1 = in.nextInt();
|
|
int v2 = in.nextInt();
|
|
edges1.get(v1).add(v2);
|
|
edges2.get(v2).add(v1);
|
|
}
|
|
|
|
int[] toPivot = bfs(edges1, 0);
|
|
int[] fromA = bfs(edges2, a);
|
|
int[] fromB = bfs(edges2, b);
|
|
|
|
int res = n + 100;
|
|
|
|
for (int i = 0; i < n; i++) {
|
|
res = Math.min(res, toPivot[i] + fromA[i] + fromB[i]);
|
|
}
|
|
|
|
out.println(res);
|
|
}
|
|
}
|