ABC065B - Trained?

atcoder.jp

ボタンを押したとき次に光るボタンの組を Dictionary<int, int> に詰めておき、押したボタンを Dictionary<int, int> から除いていく。 Dictionary<int, int> 中に無いボタンを押そうとしたら、それはすでに押されたボタンということになるので、ボタン2を光らせることは不可能と判断できる。

using System;
using System.Collections.Generic;

namespace ABC065B
{
    class Program
    {
        static void Main(string[] args)
        {
            var N = int.Parse(Console.ReadLine());
            var a = new Dictionary<int, int>();
            for(var i = 1; i <= N; i++)
            {
                a[i] = int.Parse(Console.ReadLine());
            }

            var btn = 1;
            var cnt = 0;
            while (true)
            {
                if (btn == 2)
                {
                    Console.WriteLine(cnt);
                    return;
                }
                else if (a.ContainsKey(btn))
                {
                    var next = a[btn];
                    a.Remove(btn);
                    btn = next;
                    cnt++;
                }
                else
                {
                    Console.WriteLine(-1);
                    return;
                }
            }
        }
    }
}