그래프 방향 구분
무방향 사이클은 parent 간선을 제외하고, 방향 그래프 사이클은 방문 중 정점으로 돌아가는 간선을 본다.
그래프 성질 문제는 단순히 모두 방문하는 것과 다르다. 무방향, 방향, DAG 여부에 따라 visited 배열의 의미가 바뀐다.
무방향 사이클은 parent 간선을 제외하고, 방향 그래프 사이클은 방문 중 정점으로 돌아가는 간선을 본다.
모든 정점이 한 컴포넌트라는 보장이 없으면 미방문 정점마다 DFS/BFS를 시작한다.
방향 그래프에서는 0/1 visited만으로는 현재 경로 안에 있는 정점을 구분하기 어렵다.
// 0: unvisited, 1: visiting, 2: done
bool dfs(int v) {
color[v] = 1;
for (int to : g[v]) {
if (color[to] == 1) return true;
if (color[to] == 0 && dfs(to)) return true;
}
color[v] = 2; return false;
}