문제 링크
- http://icpc.me/14866
문제 출처
- 2017 KOI 중등부 4번
사용 알고리즘
- DFS Tree
시간복잡도
- $O(N+M)$
풀이
무방향 그래프에서의 사이클 유무는, dfs tree에서 back edge의 유무 여부와 같습니다. 그러므로 정점 하나를 지웠을 때 back edge가 없어지는 정점을 찾으면 됩니다.
3가지 정도의 케이스가 나오는데, 하나씩 분석해봅시다. 아래에서 언급하는 트리는 모두 dfs tree입니다.
- v의 자식을 루트로 하는 서브트리 내부에서 back edge가 존재한다면, v는 정답이 될 수 없습니다. v를 제거하더라도 back edge가 그대로 남아있습니다.
- 트리 상에서 v보다 밑에 있는 정점과 v보다 위에 있는 정점이 연결된 back edge가 2개 이상 존재한다면 v는 정답이 될 수 없습니다. v를 제거하면 하나는 tree edge가 되고, 나머지는 back edge가 됩니다.
- v를 루트로 하는 서브트리가 아닌, 다른 곳에 back edge가 존재한다면 v를 제거하더라도 back edge는 그대로 남아있습니다.
3가지 케이스를 잘 처리해주면 됩니다.
전체 코드
1 |
|