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

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

트리 자르기 게임

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

요약
정점이 2^K-1개인 트리에서 정점을 지우고 성분을 다시 연결해 얻을 수 있는 (정점 수 - 간선 수)의 최댓값을 구합니다.
난이도

어려움10점 중 8점

유형
트리, DFS, 그리디
정답자
아직 제출이 없습니다

문제

GS와 CU는 트리 자르기 게임을 한다. 게임은 사이클이 없는 무방향 그래프 GG 위에서 진행되며, GG는 N=2K−1N = 2^K - 1개의 정점과 MM개의 간선으로 이루어져 있다. 먼저 GS는 다음 두 가지 행동을 원하는 만큼 반복할 수 있다.

  • remove v: GG에 속하는 정점 vv를 선택해 제거하고, vv와 연결된 간선을 모두 제거한다.
  • join u v: GG의 서로 다른 컴포넌트에 속하는 두 정점 uu, vv를 골라 둘 사이에 간선을 추가한다.

GS의 행동이 끝나면 CU는 다음 두 가지 행동을 원하는 만큼 반복할 수 있다.

  • join u v: GG의 서로 다른 컴포넌트에 속하는 두 정점 uu, vv를 골라 둘 사이에 간선을 추가한다.
  • slide u v w: GG에 uu-vv 간선과 vv-ww 간선이 모두 존재할 때, uu-vv 간선을 제거하고 uu-ww 간선을 추가한다.

CU의 행동이 끝났을 때 GG에 모양이 완전히 같은 두 컴포넌트가 있으면 CU가 이기고, 없으면 GS가 이긴다.

GS는 모든 정점을 지우면 쉽게 이길 수 있다는 사실을 알게 되었다. 그래서 GS는 자신의 행동이 끝났을 때 GG의 (정점 개수) - (간선 개수) 값을 최대화해서 이기기로 했다. GS를 위한 전략을 세워 보자.

입력

입력의 첫째 줄에 GG의 정점 개수 NN과 간선 개수 MM이 주어진다.

둘째 줄부터 MM개의 줄에 걸쳐 GG의 간선이 잇는 두 정점 uu, vv가 공백으로 구분되어 주어진다.

출력

GS가 선택한 전략에서 GS의 행동이 끝났을 때 GG의 (정점 개수) - (간선 개수) 값을 출력한다.

제한

  • 1≤N≤217−11 \le N \le 2^{17} - 1 (= 131071)
  • 적당한 정수 KK에 대해 N=2K−1N = 2^K - 1임이 보장된다.
  • N−20≤M≤N−1N - 20 \le M \le N - 1
  • 1≤u,v≤N1 \le u, v \le N, u≠vu \ne v

힌트

두 그래프 HH와 KK의 모양이 완전히 같다는 것은, HH와 KK의 정점에 번호를 적당히 붙였을 때 두 그래프의 간선이 잇는 번호 쌍의 집합이 서로 같다는 뜻이다.

예제1

  1. 예제 1

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