atcoder ABC 311 C - Find it!の勉強

atcoder.jp

・参考:
Editorial - Toyota Programming Contest 2023#4(AtCoder Beginner Contest 311)

・内容:参考の説明です。

・考え方:閉路の頂点を見つけて、その頂点から閉路を一周する。その過程で閉路の頂点をbにappendしていく。

n=int(input())
a=list(map(int,input().split()))
a=[0]+a    #indexが1からなので0で埋める。

#nowを1から始めて、閉路を見つける。nowがある1つの閉路の頂点になる。
now=1
for _ in range(n):
  now=a[now]  #nowから行ける頂点(a[now])をnowにする。

b=[now]  #bに閉路の頂点を入れていく。

#閉路を一周するまでやる。
while b[0]!=a[now]:
  now=a[now]
  b.append(now)

print(len(b))
print(*b)