https://www.acmicpc.net/problem/21117
21117번: Number of Colorful Matchings
Output
www.acmicpc.net
알아두어야 할 배경지식이 몇 개 있다. 자세한 사항은 https://en.wikipedia.org/wiki/Permanent_(mathematics) 여기를 참고했다.
1. 이분 그래프 G의 adjoint matrix는
2. 이분 그래프에서 perfect matching의 수는
이것의 증명은 자명하다. 그냥 주어진 식의 시그마를 잘 풀어헤치기만 하면 된다. 선택한 permutation이 G의 edge로만 구성되어 있다면 항의 값은 1이 되고, 아니면 0이 된다.
3. permanent의 계산을 다항 시간 안에 하는 것은 매우 어렵다. 만약 permanent의 계산을 다항 시간에 하는 방법이 발견된다면 P = NP가 증명되며 필즈상, 튜링상 다이렉트 열차를 탈 수 있다.
4. 하지만 만약 2로 나눈 값만을 구하고 싶다면, 체 F2 위에서 +1 = -1이므로, permanent는 determinant와 동일하다.
문제에서는 그냥 perfect matching 개수만 구하면 되는 게 아니고, 빨간색이 k개이고 파란색이 n-k개인 perfect matching 수를 구해야 한다. 머리를 좀 굴려 보면, 비슷한 문제로 "정확히 k개의 비트만 켜진 n비트 문자열의 개수는?" 같은 문제를 생각해볼 수 있다. 이 문제의 정답은
결국
마지막으로, characteristic polynomial을 구하는 알고리즘은 보통 O(n^3)에 구현 가능하지만 이 경우는 체가 F2라서 알고리즘이 먹히지 않는다. 대신 O(n^4 / 64)에 구현 가능한 Samuelson 알고리즘이라는 것이 있다. 알고리즘 자체는 O(n^4)인데, bitset을 쓰면 행렬 연산을 64배 빠르게 할 수 있다는 점을 이용하면 된다. 전체 시간복잡도는 O(n^4 / 64)이다.

'Computer Science > PS' 카테고리의 다른 글
[백준 16998] It's a Mod, Mod, Mod, Mod World [Diamond IV] (0) | 2023.02.19 |
---|---|
라빈-카프 알고리즘 구현 꿀팁 (0) | 2023.02.07 |
[백준 18292] NM과 K (2) (Platinum IV) (0) | 2023.01.29 |
[백준 1915] 가장 큰 정사각형 (Gold IV) (0) | 2023.01.24 |
[백준 9658] 돌 게임 4 (Python 풀이, Silver II) (0) | 2023.01.22 |
댓글