Problem Solving/BOJ

[백준 10552번] [DFS] DOM

  • -
728x90
반응형

Approach

DFS를 통해 트리의 높이를 추적하는 느낌이다. 다만, 사이클이 발생하는 경우에만 -1을 출력해주면 된다.

사이클이 발생하는 상황은 방문한 곳에 다시 방문을 시도하려고 할 때, -1을 출력해주면 된다.

Code

#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)

using namespace std;
int n, m, p;
int visited[100001];
int v[100001];
int r[100001];

int dfs(int c){
    visited[c] = 1;
    if(v[c] == -1) return 0;
    int cur = r[v[c]];
    int result = 0;
    if(!visited[cur]){
        int val = dfs(cur);
        if(val == -1) return -1;
        else
            result += val;
    }
    else return -1;
    return result + 1;
}

int main(void){
    fastio;
    memset(v, -1, sizeof(v));
    memset(visited, 0, sizeof(visited));
    cin >> n >> m >> p;

    for(int i = 0; i < n; i++){
        int a, b;
        cin >> a >> b;
        r[i] = a;
        if(v[b] == -1) v[b] = i;
    }

    cout << dfs(p) << "\n";
    return 0;
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.