만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

산맥

면접 대비

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

요약
도시 N개와 평면을 나누는 직선 M개가 주어질 때, 모든 도시를 잇는 도로가 건너야 하는 직선 횟수의 합의 최솟값을 구합니다.
난이도

보통10점 중 6점

유형
최소 신장 트리, 기하, 비트 연산
정답자
아직 제출이 없습니다

문제

바이토치아 왕국은 매우 독특한 지리를 가진 아름다운 나라다. 이 왕국에는 MM개의 산맥이 지나간다. 각 산맥은 좌표평면 위의 직선으로 생각할 수 있으며, 이 산맥들이 왕국을 여러 지역으로 나눈다.

한 점에서 여러 산맥이 만날 수 있다. 다행히 바이토치아에서는 세 산맥이 한 점에서 교차하지 않는다. 다만 한 산이 두 산맥에 동시에 속할 수는 있다.

바이토치아에서는 교통이 매우 불편하다. NN개 도시 사이의 주된 이동 수단이 비행기이기 때문이다. 왕은 이를 바꾸고자 도로와 터널의 망을 건설하고 있으며, 이 망으로 모든 도시 쌍을 오갈 수 있어야 한다. 두 도시를 잇는 도로는 직선일 수도 있고 아닐 수도 있다.

KK개의 서로 다른 산맥을 지나는 도로를 만들려면 건설팀 KK개가 필요하다. 두 산맥이 만나는 점을 지나는 도로라도 건설팀은 두 개가 필요하다. 왕은 도로가 가능한 한 빨리 완공되기를 바라므로, 건설팀 하나는 한 번에 한 도로에만 배정될 수 있다.

검은 점으로 표시된 도시가 세 개인 아래 예를 보자. 빨간 선으로 표시된 도로를 두 개 만들 수 있다. 도시 1과 2를 잇는 도로에는 건설팀 두 개가 필요하고, 도시 2와 3을 잇는 도로에는 건설팀 한 개가 필요하다. 도시 1과 3 사이에는 직접 잇는 도로가 없지만, 도시 2를 거쳐 갈 수 있다.

여러분의 과제는 인프라 전체를 건설하는 데 필요한 건설팀의 최소 수를 구하는 것이다. 산맥과 도시에 대한 설명을 읽어 그 최솟값을 구하고 출력하는 프로그램을 작성하라.

입력

첫 줄에 도시의 수를 나타내는 자연수 NN (1≤N≤1000001 \le N \le 100000)이 주어진다. 다음 NN개 줄에는 각 도시의 좌표 xix_i와 yiy_i (−106≤xi,yi≤106-10^6 \le x_i, y_i \le 10^6)가 주어진다. 모든 좌표는 정수이며, 서로 다른 두 도시가 같은 점에 있지 않다.

다음 줄에는 산맥의 수를 나타내는 자연수 MM (1≤M≤501 \le M \le 50)이 주어진다. 다음 MM개 줄에는 직선 ajx+bjy+cj=0a_j x + b_j y + c_j = 0의 계수 aja_j, bjb_j, cjc_j (−106≤aj,bj,cj≤106-10^6 \le a_j, b_j, c_j \le 10^6)가 주어진다. 모든 계수는 정수이고, 각 식은 올바른 직선을 나타낸다. 즉 aj≠0a_j \ne 0 또는 bj≠0b_j \ne 0이다. 또한 서로 다른 두 식이 같은 직선을 나타내지 않는다.

어떤 도시도 어떤 산맥 위에 있지 않으며, 세 산맥이 한 점에서 교차하지 않는다는 것이 보장된다.

출력

최소 건설팀 수를 나타내는 정수 하나를 출력한다.

예제2

  1. 예제 1

    입력
    3
    -1 -1
    0 5
    2 5
    3
    1 1 -1
    3 4 -12
    1 0 -1
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2
    0 -2
    0 2
    2
    0 1 -1
    0 1 1
    
    예상 출력
    2