Cắt hình

Đề bài

Mô tả

Cho một tấm giấy kẻ ô kích thước n×m. Một số ô được tô màu. Gọi A là tập hợp tất cả các ô được tô màu. Đảm bảo tập A khác rỗng và liên thông.

Một tập các ô được tô màu gọi là liên thông nếu với mọi hai ô ab thuộc tập đó, tồn tại một dãy các ô cùng thuộc tập, bắt đầu từ a và kết thúc ở b, sao cho hai ô liên tiếp bất kỳ trong dãy có chung một cạnh. Theo quy ước, tập rỗng và tập chỉ gồm đúng một ô đều được coi là liên thông.

Nhiệm vụ của bạn là tìm số ô ít nhất cần xóa khỏi tập A để tập trở nên không liên thông. Nếu không thể làm cho tập không liên thông, in ra 1.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm: kích thước tấm giấy.
  • n dòng tiếp theo, mỗi dòng gồm m ký tự mô tả tấm giấy: ký tự thứ j của dòng thứ i là "#" nếu ô tương ứng được tô màu (thuộc A), hoặc "." nếu ô không được tô màu.

Dữ liệu ra

In ra một số nguyên: số ô ít nhất cần xóa để tập A trở nên không liên thông, hoặc 1 nếu không thể.

Ràng buộc

  • 1n,m50
  • Tập A khác rỗng và liên thông.

Ví dụ

Input Output Giải thích
5 4
####
#..#
#..#
#..#
####
2 Xóa hai ô bất kỳ không chung cạnh là đủ để hình bị chia cắt.
5 5
#####
#...#
#####
#...#
#####
2 Không có ô nào mà xóa riêng nó làm hình rời ra, nên cần ít nhất 2 ô.
3 3
.#.
###
.#.
1 Hình chữ thập. Xóa ô ở tâm là bốn ô còn lại rời nhau.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0