[アルゴリズム]伯俊>#10552.DOM

1269 ワード

質問リンク
白駿#10552。DOM
解答方法
これはとても簡単なDFS問題です!「とても簡単」な理由は、幹線が1本しかないか、1本もないからです!特定のチャンネルが苦手な人は多いかもしれませんが、チャンネルを変えるために立ち上がった人は最小の一人なので、最小の一人を記憶して考えるだけですほほほ、もう一度視聴したチャンネルにアクセスすれば、ループ-1出力と判断できます!簡単な質問ですね~
コード#コード#
import java.util.*;

public class BOJ10552 {
    static int count = 0;
    static int[] toFavouriteCH = new int[100000 + 1];
    static boolean[] visited = new boolean[100000 + 1];
    static public void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(); // 시청자 수
        int m = sc.nextInt(); // 채널 수 1 to m
        int p = sc.nextInt(); // 최초 채널


        while(--n >= 0) {
            int favouriteCH = sc.nextInt();
            int hatedCH = sc.nextInt();

            if (toFavouriteCH[hatedCH] == 0) toFavouriteCH[hatedCH] = favouriteCH;
        }

        changeChannel(p);

        System.out.print(count);
    }

    static public void changeChannel(int ch) {
        if (visited[ch]) count = -1;
        else if (toFavouriteCH[ch] != 0) {
            count++;
            visited[ch] = true;
            changeChannel(toFavouriteCH[ch]);
        }
    }
}