지도 색칠하기
시간 제한1초메모리 제한128 MB
여러 폴리곤으로 이루어진 국가들 사이에서 경계선을 실제로 공유하는 경우를 판별해 인접 그래프를 만들고, 인접한 국가끼리 다른 색을 쓰도록 하는 최소 색상 수를 구합니다.
문제
당신은 이제부터 탐험할 신비한 세계의 지도를 손에 넣었다. 지도에는 국경이 복잡하게 얽힌 여러 나라가 그려져 있고, 탐험 예정 지역 전체가 담겨 있다. 그러나 한 가지 잉크 색으로만 그려져 있어서 어느 영역이 어느 나라에 속하는지 한눈에 알아보기 어렵다. 그래서 출발 전에 지도에 색을 칠하기로 했다.
각 나라는 하나 이상의 영토로 이루어지며, 각 영토는 단순 다각형 모양이다. 한 나라의 영토들은 서로 붙어 있지 않을 수도 있으므로, 한 나라가 서로 떨어진 여러 영토를 가질 수 있다. 같은 나라에 속한 모든 영토는 반드시 같은 색으로 칠해야 한다. 서로 다른 두 나라는 같은 색을 써도 되지만, 인접한 두 나라는 서로 다른 색으로 칠해야 한다. 두 나라는 각자의 영토 중 어느 것이라도 길이가 0이 아닌 경계를 공유하면 인접한 것으로 본다. 한 점에서만 만나는 영토들은 경계를 공유하는 것으로 치지 않는다.
이 규칙에 따라 지도를 칠하는 데 필요한 최소 색의 개수를 구하는 프로그램을 작성하여라.
입력
입력은 여러 개의 지도로 이루어진다. 각 지도는 영토의 총 개수 이 적힌 줄로 시작한다. 은 인 양의 정수이다. 그 뒤에 개의 영토 자료가 이어진다.
꼭짓점이 개인 영토는 다음 형식으로 주어진다.
String
x1 y1
x2 y2
...
xm ym
-1
String 은 그 영토가 속한 나라의 이름으로, 영숫자로 이루어진 문자열이며 길이는 1자 이상 20자 이하이다. 한 나라에 영토가 여럿이면 각 영토마다 같은 이름이 나타난다.
나머지 줄은 영토의 꼭짓점을 나타낸다. 각 꼭짓점 줄에는 음이 아닌 두 정수, 곧 좌표와 좌표가 공백 하나로 구분되어 있으며, 어느 좌표도 1000을 넘지 않는다. 영토의 변은 이웃한 두 꼭짓점을 잇고, 마지막 꼭짓점과 첫 꼭짓점을 이어 얻는다. -1 만 있는 줄이 꼭짓점 목록의 끝을 나타낸다. 꼭짓점의 개수는 을 만족한다.
모든 다각형은 단순하며(경계가 스스로 교차하거나 맞닿지 않음), 서로 다른 두 다각형은 넓이가 0이 아닌 영역을 공유하지 않는다고 가정해도 좋다. 한 지도에 들어 있는 나라의 수는 10을 넘지 않는다.
입력의 끝은 0 하나만 있는 줄로 나타낸다.
출력
각 지도마다, 주어진 규칙에 따라 칠하는 데 필요한 최소 색의 개수를 한 줄에 출력한다.