만드는 중입니다

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

교차하는 현으로 최대 집합 만들기

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

요약
원 위의 n개 점이 현 n/2개로 연결되어 있을 때, 최대 k개의 현을 바꿔 서로 모두 교차하는 현의 최대 개수를 구합니다.
난이도

어려움10점 중 8점

유형
조합론, 그리디, 완전 탐색
정답자
아직 제출이 없습니다

문제

원둘레 위에 nn개의 점이 정다각형을 이루도록 놓여 있다. 점들은 시계 방향으로 1부터 nn까지 번호가 매겨져 있다. 점의 개수 nn은 짝수이다.

각 점은 정확히 다른 점 하나와 연결되어 있어 n/2n / 2개의 현이 만들어진다. 이 중 kk개의 현을 임의의 현으로 바꿀 수 있다. 주어진 점에서 끝나지 않는 현이어도 된다. 그다음 모든 쌍이 서로 교차하는 현들의 집합을 고른다. 목표는 현을 바꾸고 집합을 골라서 집합의 크기를 최대로 만드는 것이다.

입력

첫 번째 줄에 정수 nn과 kk가 주어진다 (2≤n≤80002 \le n \le 8000, nn은 짝수, 0≤k≤min⁡(n/2,20)0 \le k \le \min(n / 2, 20)).

두 번째 줄에는 1부터 nn까지 정수의 순열 PP가 주어진다. Pi=jP_i = j이면 점 ii와 점 jj가 현으로 연결되어 있다. Pi=jP_i = j이면 Pj=iP_j = i이고, Pi≠iP_i \ne i임이 보장된다.

출력

kk개의 주어진 현을 바꾼 뒤 고를 수 있는, 서로 교차하는 현 집합의 최대 크기를 한 정수로 출력한다.

힌트

두 번째 예시에서는 현 (1,7)(1, 7)을 바꾸면 서로 교차하는 현 3개의 집합을 얻을 수 있다. 예를 들어 (2,4)(2, 4)를 제외한 모든 현은 쌍마다 교차하는 집합을 이룬다.

예제2

  1. 예제 1

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

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