본문 바로가기

정리/알고리즘

[알고리즘] 정점 선인장

https://www.acmicpc.net/problem/10891

정점 선인장의 정의에 대해서는 해당 문제에 나와있습니다.

 

이중 연결 요소를 이용합니다.

그래프의 모든 정점을 이중 연결 요소로 묶어버리면 3가지 유형으로 구분할 수 있습니다.

 

  • 정점이 두 개인 BCC (단절선)
  • 단순 사이클
  • 단순 사이클이 아닌 사이클

우선 단절선은 단순 사이클에 해당되지 않으므로 무시해주면 됩니다. edge가 한 개 담긴 이중 연결 요소를 만나면 continue하는 식으로 구현하면 됩니다.

 

단순 사이클의 경우, 문제에서 나온 것처럼 하나까지만 허용해 줍시다.

 

단순 사이클이 아닌 사이클

 

사이클이면서 단순 사이클이 아닌 경우, 존재만으로 선인장을 만들 수 없습니다. 단순 사이클은 정점의 개수와 간선의 개수가 같다는 특징이 있습니다. 위의 그림에서도 간선 (2, 3)이 없다면 단순 사이클의 조건을 만족합니다.

 

그러므로 하나의 정점에 대해서 간선의 개수가 3개 이상인 이중 연결 요소가 최대 한 개이면서, 해당 이중 연결 요소의 간선의 개수와 정점의 개수가 동일한지 확인하면 정점 선인장을 판별할 수 있습니다.

 


Reference

https://ps.mjstudio.net/bcc

'정리 > 알고리즘' 카테고리의 다른 글

[알고리즘] 이분매칭  (0) 2023.03.20
[알고리즘] 쾨닉의 정리 (Kőnig's theorem)  (0) 2023.02.27
[알고리즘] 마나허 (Manacher)  (0) 2023.02.26
[알고리즘] KMP  (0) 2023.02.05
[알고리즘] 이분 탐색 (Binary Search)  (0) 2023.01.15