1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/// (preorder, cycle_start_index)
pub fn functional_graph_prop(
f: &[usize],
src: usize,
) -> (Vec<usize>, usize) {
let n = f.len();
let mut idx = vec![n; n];
let mut preorder = Vec::with_capacity(n);
let mut x = src;
for i in 0..n + 1 {
if idx[x] == n {
idx[x] = i;
preorder.push(x);
x = f[x];
continue;
}
return (preorder, idx[x]);
}
panic!();
}
#[cfg(test)]
mod tests {
#[test]
fn test() {}
}