만드는 중입니다

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

네트워크 취약성

시간 제한3초메모리 제한512 MB

요약
구간 그래프의 구간 표현이 주어질 때, 정확히 k개의 정점을 제거한 뒤 남는 연결 요소의 최대 개수를 각 k에 대해 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 구간, 그래프
정답자
아직 제출이 없습니다

문제

네트워크 취약성은 자연재해, 요소 고장, 적대적 공격 같은 여러 장애 상황에서 네트워크 성능이 얼마나 떨어지는지를 나타낸다. 네트워크는 흔히 그래프로 표현되며, 정점은 노드에, 간선은 링크에 각각 대응한다. 그래서 네트워크와 그래프는 같은 뜻으로 쓴다. 연결도는 정점을 지웠을 때 그래프가 연결되지 않거나 정점이 하나만 남게 되는 최소 정점 수로 정의되며, 네트워크 취약성을 재는 가장 중요한 척도다.

하지만 연결도는 정점 제거에 대한 그래프의 저항성을 일부만 반영한다. 그래서 여러 지표가 제안되었고, 그중 토네스(toughness)와 산란수(scattering number)가 가장 널리 쓰인다. 두 지표의 바탕은 정점 kk개를 제거한 뒤 남는 연결 요소 수의 최댓값이다. ck(G)c_k(G)는 그래프 GG에서 정확히 kk개의 정점을 제거했을 때 얻을 수 있는 연결 요소 수의 최댓값을 뜻한다. 주어진 그래프 GG와 양의 정수 kk에 대해 ck(G)c_k(G)를 구하는 문제는 계산적으로 어렵다.

하지만 구간 그래프 같은 일부 그래프 클래스에서는 ck(G)c_k(G)를 다항 시간에 구할 수 있다. 구간 그래프는 실수선 위의 (닫힌) 구간들을 교차시킨 그래프다. 두 정점은 대응하는 구간이 서로 교차할 때, 그리고 그때에만 간선으로 이어진다. 이 구간들의 집합을 그래프의 구간 표현이라고 부른다. 그림은 구간 그래프와 그 구간 표현의 예이다.

(a) 구간 그래프(b) (a) 그래프의 구간 표현

정점이 nn개인 구간 그래프 GG의 구간 표현이 주어졌을 때, k∈{0,1,…,n−1}k \in \{0, 1, \ldots, n-1\}인 모든 ck(G)c_k(G)를 계산하는 효율적인 프로그램을 작성하라. 예를 들어 그림 (b)의 구간 표현이 주어지면 c0(G),c1(G),…,c7(G)c_0(G), c_1(G), \ldots, c_7(G)는 차례로 1, 1, 1, 2, 2, 3, 2, 1이다.

입력

첫 줄에 구간의 개수를 나타내는 양의 정수 nn이 주어진다. n≤2,000n \le 2{,}000이다. 이어지는 nn개의 줄에는 각 구간의 왼쪽 끝점과 오른쪽 끝점이 공백으로 구분되어 주어진다. 모든 끝점은 −100,000,000-100{,}000{,}000 이상 100,000,000100{,}000{,}000 이하의 정수다.

출력

한 줄에 nn개의 수 c0(G),c1(G),…,cn−1(G)c_0(G), c_1(G), \ldots, c_{n-1}(G)를 공백 한 칸으로 구분하여 출력한다.

예제4

  1. 예제 1

    입력
    8
    3 8
    1 8
    1 7
    1 6
    4 8
    1 2
    3 5
    7 8
    
    예상 출력
    1 1 1 2 2 3 2 1
    
  2. 예제 2

    입력
    3
    -2 -2
    -2 7
    -2 7
    
    예상 출력
    1 1 1
    
  3. 예제 3

    입력
    4
    -1 -1
    3 4
    5 6
    7 8
    
    예상 출력
    4 3 2 1
    
  4. 예제 4

    입력
    5
    1 2
    2 3
    3 4
    6 7
    7 8
    
    예상 출력
    2 3 3 2 1