N = 100 G = [] G += [(n, n+1) for n in range(1, N)] + [(N,1)] G += [(100, 2)] M = len(G) print(f'{N=}, {M=}') dp = [0] * (N+1) dp[1] = 1 max_T = 10000 ans = [0] * (max_T + 1) for t in range(max_T + 1): ans[t] = sum(dp) newdp = [0] * (N+1) for a, b in G: newdp[b] |= dp[a] dp = newdp # 各時刻ごとの答。 # 解が収束して周期にはいるまでに 9800 秒ほどかかることが確かめられる。 # そこまでの dp 遷移の回数は、M 倍して 980_000 回ほど。 for t, x in enumerate(ans): print(t, x)