|
| 1 | +use ac_library_rs::MfGraph; |
| 2 | +use std::io::Read; |
| 3 | +use std::iter; |
| 4 | + |
| 5 | +fn main() { |
| 6 | + const N: usize = 128; |
| 7 | + |
| 8 | + let mut buf = String::new(); |
| 9 | + std::io::stdin().read_to_string(&mut buf).unwrap(); |
| 10 | + let mut input = buf.split_whitespace(); |
| 11 | + |
| 12 | + let n: usize = input.next().unwrap().parse().unwrap(); |
| 13 | + let m: usize = input.next().unwrap().parse().unwrap(); |
| 14 | + let mut s = vec![vec![false; N]; N]; |
| 15 | + for i in 1..=n { |
| 16 | + for (j, c) in (1..=m).zip(input.next().unwrap().chars()) { |
| 17 | + s[i][j] = c == '.'; |
| 18 | + } |
| 19 | + } |
| 20 | + |
| 21 | + let dy = [1, 0, -1, 0]; |
| 22 | + let dx = [0, 1, 0, -1]; |
| 23 | + let c = "v>^<".chars().collect::<Vec<_>>(); |
| 24 | + let mut graph = MfGraph::<i32>::new(128 * 128); |
| 25 | + |
| 26 | + for i in 1..=n { |
| 27 | + for j in 1..=m { |
| 28 | + if (i + j) % 2 == 0 { |
| 29 | + graph.add_edge(0, i * N + j, 1); |
| 30 | + for (dy, dx) in dy.iter().zip(dx.iter()) { |
| 31 | + let k = (i as i32 + dy) as usize; |
| 32 | + let l = (j as i32 + dx) as usize; |
| 33 | + if s[i][j] && s[k][l] { |
| 34 | + graph.add_edge(i * N + j, k * N + l, 1); |
| 35 | + } |
| 36 | + } |
| 37 | + } else { |
| 38 | + graph.add_edge(i * N + j, 1, 1); |
| 39 | + } |
| 40 | + } |
| 41 | + } |
| 42 | + println!("{}", graph.flow(0, 1)); |
| 43 | + let mut res: Vec<Vec<_>> = (1..=n) |
| 44 | + .map(|i| (1..=m).map(|j| if s[i][j] { '.' } else { '#' }).collect()) |
| 45 | + .collect(); |
| 46 | + for e in graph.edges() { |
| 47 | + let i = e.from / N; |
| 48 | + let j = e.from % N; |
| 49 | + let k = e.to / N; |
| 50 | + let l = e.to % N; |
| 51 | + if e.flow == 1 { |
| 52 | + for h in 0..4 { |
| 53 | + if i as i32 + dy[h] == k as i32 && j as i32 + dx[h] == l as i32 { |
| 54 | + res[i - 1][j - 1] = c[h]; |
| 55 | + res[k - 1][l - 1] = c[h ^ 2]; |
| 56 | + } |
| 57 | + } |
| 58 | + } |
| 59 | + } |
| 60 | + for s in res { |
| 61 | + println!("{}", s.iter().collect::<String>()); |
| 62 | + } |
| 63 | +} |
0 commit comments