eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Оптимальное разрезание

Оптимальное разрезание

У Поликарпа есть прямоугольный кусочек клетчатой бумаги \textbf{n}×\textbf{m} клеток. В каждой клетке бумаги записана буква. Две клетки назовём \textit{связными}, если они имеют общую сторону и в них записана одна и та же буква. \textit{Одноцветной областью} назовем множество клеток бумаги таких, что любые две клетки этого множества связаны напрямую или косвенно (через последовательность других клеток) и при этом нельзя увеличить это множество, не нарушая предыдущего свойства. Сторона клетки называется \textit{внутренней}, если она отделяет друг от друга две какие-то клетки бумаги. \textit{Путём} назовем последовательность различных внутренних сторон клеток бумаги такую, что любые две последовательные стороны пересекаются в углу какой-то клетки. Поликарп хочет отсоединить все одноцветные области друг от друга, разрезая бумагу. Одним разрезом разрешается разрезать последовательность ранее не разрезанных сторон, образующую некоторый путь. Какое минимальное количество разрезов ему для этого понадобится? Учтите, что после применения разрезов одноцветные области не должны оказаться разрезанными. \InputFile В первой строке записано два целых числа через пробел \textbf{n} и \textbf{m} (1 ≤ \textbf{n}×\textbf{m} ≤ \textbf{10^5}) --- размеры кусочка бумаги. В следующих \textbf{n} строках записано по \textbf{m} строчных букв латинского алфавита --- описание кусочка бумаги. \OutputFile Выведите единственное целое число --- минимальное количество разрезов, требуемое для отделения цветных областей друг от друга.
Лимит времени 1 секунда
Лимит использования памяти 256 MiB
Входные данные #1
2 2
ab
ba
Выходные данные #1
2
Источник Зимняя школа Харьков 2013, День 6 - Г.Агапова и И.Фефера