atcoder ABC 311 C - Find it!の勉強
・参考:
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)