아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

진주 자수

시간 제한2초메모리 제한1024 MB

요약
격자에 놓인 진주들과 이들을 잇는 나무 구조가 주어질 때, 각 직사각형 영역 안의 진주들이 이루는 연결 요소의 개수를 구한다.
난이도

어려움10점 중 9점

유형
트리, DFS, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

옛날부터 해안 마을의 자수공들은 같은 크기의 격자로 이루어진 직사각형 수건 위에 진주로 자수를 놓았다. 자수는 수건의 한 격자 중앙에 진주를 꿰매는 것에서 시작했다. 새 진주를 꿰매려면 자수공은 이미 진주가 있는 격자에서 가로 또는 세로로 인접한 빈 격자로 실을 꿰었다. 새 진주는 실의 끝 격자 중앙에 꿰매졌다. 이 과정은 진주가 다 떨어질 때까지 반복되었다.

이런 축제용 수건 하나가 박물관에 있다. 안타깝게도 무늬의 일부가 손실되었지만 수건에 대한 설명은 남아 있다. 박물관 측은 수건의 직사각형 조각 하나를 복원하려고 하지만 어떤 조각인지는 아직 정하지 않았다. 조각 복원 비용은 그 조각에 들어가는 무늬의 연결 부분 개수에 따라 달라진다. 무늬의 한 부분이 연결되었다는 것은, 그 부분의 어떤 진주에서든 조각 경계를 벗어나지 않고 실을 따라 그 부분의 다른 어떤 진주로도 갈 수 있다는 뜻이다. 박물관 측은 실을 따라 서로 오갈 수 있는 두 진주는 항상 같은 연결 부분에 속한다고 본다.

주어진 각 조각에 대해 무늬의 연결 부분 개수를 계산하는 프로그램을 작성해야 한다.

입력

첫째 줄에는 수건의 가로, 세로 격자 크기 aa, bb가 주어진다.

둘째 줄에는 무늬에 있는 진주 개수 nn과 조각 개수 qq가 주어진다.

다음 (n−1)(n - 1)개 줄에는 실에 대한 설명이 주어진다. 각 실은 다음 중 하나이다.

  • h xx yy: 좌표 (x,y)(x, y)와 (x+1,y)(x + 1, y) 격자에 있는 진주가 가로 실로 연결되어 있다 (1≤x≤a−11 \leq x \leq a - 1; 1≤y≤b1 \leq y \leq b).
  • v xx yy: 좌표 (x,y)(x, y)와 (x,y+1)(x, y + 1) 격자에 있는 진주가 세로 실로 연결되어 있다 (1≤x≤a1 \leq x \leq a; 1≤y≤b−11 \leq y \leq b - 1).

자수공이 실을 놓은 순서는 알 수 없으므로 실에 대한 설명은 임의의 순서로 주어진다. 무늬는 문제에서 설명한 과정을 거쳐 만들어졌음이 보장된다.

다음 qq개 줄에는 조각에 대한 설명이 주어진다. 각 설명은 네 정수 x1x_1, y1y_1, x2x_2, y2y_2로 이루어지며, 조각의 왼쪽 아래 격자와 오른쪽 위 격자 좌표이다 (1≤x1≤x2≤a1 \leq x_1 \leq x_2 \leq a; 1≤y1≤y2≤b1 \leq y_1 \leq y_2 \leq b).

출력

출력은 qq개 줄로 이루어진다. ii번째 줄에는 ii번째 조각에 있는 무늬의 연결 부분 개수를 출력한다.

힌트

예제에 대한 설명.

x1=1x_1 = 1, y1=1y_1 = 1, x2=4x_2 = 4, y2=3y_2 = 3x1=3x_1 = 3, y1=2y_1 = 2, x2=4x_2 = 4, y2=3y_2 = 3x1=3x_1 = 3, y1=1y_1 = 1, x2=3x_2 = 3, y2=1y_2 = 1x1=1x_1 = 1, y1=2y_1 = 2, x2=3x_2 = 3, y2=3y_2 = 3

예제1

  1. 예제 1

    입력
    4 3
    8 4
    v 1 1
    h 1 1
    h 2 1
    v 2 1
    v 2 2
    h 1 3
    h 3 1
    1 1 4 3
    3 2 4 3
    3 1 3 1
    1 2 3 3
    
    예상 출력
    1
    0
    1
    2