Conectando Islas


Submit solution

Points: 100 (partial)
Time limit: 1.0s
Java 8 3.0s
Python 6.0s
Memory limit: 256M
Java 8 2G

Author:
Problem type
Allowed languages
Ada, Assembly, Awk, BrainF***, C, C#, C++, Dart, Go, Java, JS, Kotlin, Lua, Pascal, Perl, Prolog, Python, Scala, Swift, VB

Description

Se le entrega un mapa rectangular de RxC celdas que muestra una serie de pequeñas islas rodeadas por mar. Cada celda contiene agua de mar o tierra (pero no ambas). Se considera que dos celdas están conectadas si comparten un borde o se puede viajar entre esas dos celdas usando otras celdas conectadas. Una isla es un grupo máximo de celdas terrestres que están conectadas. Por ejemplo, el siguiente mapa 12x15 tiene 5 islas (pintadas en verde):

enter image description here

Para facilitar el viaje, los gobiernos de estas naciones isleñas desean construir una serie de puentes para conectar las islas. Cada puente conecta exactamente dos islas. El costo de construir un puente es igual al número de celdas que ocupa en el mapa. Como todos los puentes tienen alturas distintas, no se intersectan entre sí.

¿Cuál es el costo mínimo para construir los puentes necesarios para conectar todas las islas?

Para el ejemplo anterior, aquí hay una manera de construir puentes (denotados por los cuadrados grises) que minimizan el costo total:

enter image description here

Input specification

En la primera línea de entrada, tenemos un solo número entero T (1 ≤ T ≤ 10), el cual corresponde a la cantidad de casos de pruebas a procesar.

Cada caso de prueba consiste en dos líneas:

  1. Línea 1 contiene exactamente dos número enteros R (3 ≤ R ≤ 50) y C (3 ≤ C ≤ 50), separados por un espacio.
  2. Líneas 2 hasta R+1 contienen C caracteres cada una, donde el j-ésimo caracter en la i-ésima fila corresponde a la celda (i, j) del mapa. Cada caracter es '.' o 'X', representando una celda con agua o tierra respectivamente. Se garantiza que las celdas en el borde del mapa (las que se encuentran en la primera fila, la última fila, primera columna y/o última columna) contienen agua de mar.

Para cada caso, el número de islas es al menos 2 y como máximo 300.

Output specification

Por cada caso de prueba, en el orden dado en la entrada, imprime el costo mínimo de construir puentes que conecten todas las islas.

Sample input

2
12 15
...............
..X.X..........
..XXX..........
............X..
..XX...........
..X....X.......
..X....X.......
..XXX..X.......
.......X.......
........XX.....
.........X.....
...............
5 5
.....
.X...
...X.
.X...
.....

Sample output

10
3

Comments

There are no comments at the moment.