SCC of Tournament Graph¶
Definition 1
Tournament graph는 정점이 \(N\)개인 무방향 완전그래프의 모든 간선에 방향성을 부여한 방향그래프이다. 정점 \(N\)개인 tournament graph의 간선은 총 \(\binom{N}{2}\)개이다.
Tournament graph는 매우 복잡한 형태이니, 이를 구조화시키기 위하여 그래프를 SCC별로 묶어 정리하자.
Property 1¶
Property 1
Tournament graph \(G=(V, E)\)를 SCC별로 묶어 위상정렬한 순서대로 나열하자. 각 SCC 집합을 위상정렬 순서대로 \(S_1, S_2, \cdots, S_k\)라 하면 다음이 성립한다.
즉, 서로 다른 두 SCC에 속하는 정점 \((u, v)\)에 대하여 \(u\)가 왼쪽 집합의 정점, \(v\)가 오른쪽 집합의 정점이면 \((u, v)\) 방향의 간선이 존재한다.
Property 2¶
Property 2
Tournament graph에는 hamiltonian path가 적어도 하나 존재한다.
이 hamiltonian path를 일렬로 나열하면, 인접한 정점들 사이에 오른쪽으로 가는 간선이 존재하는 형태로 배열할 수 있고, 이 때 각 SCC는 인접한 구간을 이룬다.
Proof
정점들을 하나씩 추가하며, 귀납적으로 hamiltonian path를 유지할 수 있음을 보이자. 현재 새로 추가할 정점을 \(v\)라 하고, 이미 추가된 정점들로 구성된 hamiltonian path를 순서대로 \(u_1, u_2, \cdots, u_k\)라 하자. 만약 \(u_i \rightarrow v\), \(v \rightarrow u_{i+1}\) 간선이 존재한다면 \(u_i\)와 \(u_{i+1}\) 사이에 \(v\)를 추가하면 된다. 만약 위 식을 만족하는 \(u_i\)가 없다면, 맨 앞이나 맨 뒤에 \(v\)를 무조건 추가할 수 있다. 위 과정을 반복하면 귀납적으로 hamiltonian path를 구할 수 있다.
Property 3¶
Property 3
Tournament graph가 \(1\)개의 SCC로 구성되어 있다면, hamiltonian path 뿐만 아니라 hamiltonian cycle이 적어도 하나 존재한다.
Tournament graph를 SCC별로 분해하고, 각 SCC의 hamiltonian cycle들을 순서대로 일렬로 나열하면, Property 2에 추가로 다음이 성립한다.
- 인접한 정점들 사이에 오른쪽으로 가는 간선이 존재한다.
- 한 SCC 내에서는 가장 오른쪽 정점에서 가장 왼쪽 정점으로 가는 간선이 존재한다.
- 각 SCC는 인접한 구간을 이룬다.
Proof
정점들을 하나씩 추가하며, 위와 같이 각 SCC별 hamiltonian cycle을 관리하자. 이제 새로운 정점 \(v\)가 추가되면, \(u_i \rightarrow v\)인 가장 오른쪽 \(u_i\)와 \(v \rightarrow u_j\)인 가장 왼쪽 \(u_j\)가 하나의 SCC로 묶이게 된다. 만약 묶이는 SCC들이 없다면, 단순히 사이에 \(v\)를 Property 2와 같이 추가해주면 된다. \([l, r]\)의 SCC들이 하나의 SCC로 묶이게 될 때에는, 구간의 각 hamiltonian cycle들을 순서대로 나열하면 새로운 SCC의 hamiltonian cycle을 구할 수 있다. 위 과정을 반복하면 전체 그래프를 hamiltonian cycle들로 쪼갤 수 있다.
Implementation¶
https://www.acmicpc.net/problem/26843 문제를 해결하기 위하여 Property 3의 귀납적인 construction을 \(O(N^2)\)에 구현한 예시이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
|