본문 바로가기

ps (문제)

ICPC 2019 Seoul Regional C번 Islands

문제 링크: https://www.acmicpc.net/problem/17970

 

17970번: Islands

Your program is to read from standard input. The input starts with a line containing an integer n (5 ≤ n ≤ 100,000), where n is the number of villages in each island. The villages are numbered from 1 to n. In the following two lines, each line contains

www.acmicpc.net

 

1. 정점의 순서들이 가지는 성질에 대해서 알아보자.

  • 하나의 섬에서 $1$번째 정점부터 $i$번째 정점까지 하나의 구간을 이룬다.
  • $i+1$번째 정점은 $1$번째 정점부터 $i$번째 정점이 이루는 구간과 인접해 있다.

시작점을 고정하자. 새로운 정점을 방문할 때마다 두 섬 모두에서 방문한 정점이 이루는 구간과 인접한 정점을 선택하는 그리디한 알고리즘이 성립한다. 따라서 문제를 시간복잡도 $O(N^2)$에 해결할 수 있다.

 

2. 정점 $i$와 섬 $j$에서 인접한 정점들의 집합을 $N_j(i)$로 정의하자. $N_1(i)=N_2(i)$를 만족하는 정점 $i$를 제거해도 모든 정점을 방문하는 경로의 존재 여부는 바뀌지 않는다.

$p$, $q$랑 인접한 정점 $r$이 있다고 가정하자. 시작점이 $r$인 경우에는 두 섬 모두에서 인접한 $p$, $q$를 방문하고 시작한다. 이는 $r$을 제거한 경우 $p$에서 시작해 $q$를 방문하는 경로와 동일하게 생각할 수 있다.

시작점이 $r$이 아닌 경우를 생각해보자. 편의상 $p$를 $q$보다 먼저 방문한다고 하자. $p$와 인접한 $r$, $r$과 인접한 $q$를 방문하게 된다. 이는 $r$을 제거한 경우 $p$에서 $q$를 방문하는 것과 동일하게 생각할 수 있다.

 

 

$N_1(i)=N_2(i)$를 만족하는 정점 $i$가 없을 때까지 계속해서 정점을 제거하자. 제거하다가 점의 개수가 $3$개가 된다면 아무 길이 3의 경로가 답이 될 수 있기 때문에 정점을 제거하기 전의 섬에서도 임의의 점에서 시작해서 답을 얻어낼 수 있다. 이제 모든 정점 $i$에 대해 $N_1(i) \neq N_2(i)$인 경우에 대해 알아보자.

 

3. 정점 $i$에서 시작한 탐색이 구간 $P_i$에서 끝난다고 하자. $P_i$ 밖의 정점 $j$에 대해 $P_j \neq \{1, 2, \cdots, N\}$이라면 $|P_i \cap P_j| \leq 2$이다.

$P_i \cap P_j$가 구간을 이루지 않고 $P_i$의 양쪽 끝에 존재한다고 하자. 그렇다면 $P_i^C \subset P_j$이다. $j$에서 시작해서 탐색을 할 때 $P_i$ 내부에 있는 정점의 우선순위를 가장 나중으로 한다면 방문한 정점들의 구간이 $P_i^C$가 되는 시점이 있다. $P_i^C$를 구성하는 경로와 $P_i$를 구성하는 경로의 끝점을 이어서 $j$에서 시작하는 길이 $N$의 경로를 완성할 수 있어서 모순이다.

따라서 $P_i \cap P_j$은 구간을 이룬다. $j$에서 교집합 내부의 정점을 구간의 시작에서 끝 순으로 탐색하기 때문에 $P_i \cap P_j$의 크기가 $3$ 이상이라면 $P_i \cap P_j$의 끝점이 아닌 점의 $N_1$과 $N_2$가 같아서 모순이다.

 

4. $j \in P_i$인 경우에 $P_j \subset P_i$이다. 위에서 설명한 그리디 알고리즘을 조금 더 보완하자. 시작점을 고정하고 그리디하게 탐색을 한 뒤에, 만약 길이 $N$의 경로를 만드는 데 실패했다면 탐색한 구간 내부에서 시작점을 잡지 않는 것이다.  이는 $O(N)$의 실행시간을 보인다. 

$P_i$의 끝부분에 있는 점을 2개씩 제거한 집합을 $Q_i$라고 하자. 위 알고리즘에서 시작점으로 잡은 정점은 $Q$가 겹치지 않는다. 따라서 길이 $N$의 경로가 나오기 전에 전체 탐색하는 정점의 개수는 $5N$개를 넘지 않는다.

'ps (문제)' 카테고리의 다른 글

SNUPC 2022 G번 수 만들기  (0) 2024.04.04
ICPC 2019 Seoul Regional E번 Network Vulnerability  (0) 2024.04.01
ICPC 2021 Seoul Regional I번 Postman  (0) 2024.03.29
CCO23 day1  (0) 2023.07.24
백준 14421 The Kingdom of JOIOI  (0) 2023.01.20