BFS
fn bfs(adj: &Vec<Vec<usize>>, srcs: Vec<usize>, inf: usize) -> (Vec<usize>, Vec<usize>) {
let n = adj.len();
let mut dep = vec![inf; n];
let mut par = vec![!0; n];
let mut que = std::collections::VecDeque::new();
for src in srcs {
dep[src] = 0;
par[src] = src;
que.push_back(src);
}
while let Some(u) = que.pop_front() {
for &v in adj[u].iter() {
if dep[v] == inf {
dep[v] = dep[u] + 1;
par[v] = u;
que.push_back(v);
}
}
}
(dep, par)
}