Submission #73306585


Source Code Expand

import sys

try:
    sys.stdin = open("input.txt", "r")
    sys.stdout = open("output.txt", "w")
except FileNotFoundError:
    pass

import math
from collections import Counter
from collections import defaultdict as dd, deque
from bisect import bisect_left as bl , bisect_right as br
from heapq import heappush, heappop
from math import gcd, floor, ceil, log2, sqrt , isqrt
from functools import lru_cache
from itertools import groupby as gb

from sortedcontainers import SortedList, SortedSet,SortedDict



sys.setrecursionlimit(1000000)

MOD = 10**9 + 7

N = 10**6 + 5
sieve = [1] * (N)
sieve[0] = sieve[1] = 0
fac = [1 for i in range(N)]
ifac = [1 for i in range(N)]
primes = []

def soe():
    for i in range(2, N):
        if sieve[i] == 1:  
            for j in range(i*i, N, i):
                sieve[j] = 0

    for i in range(N):
        if sieve[i]:
            primes.append(i)

def compute_factorials():
    for i in range(1, N):
        fac[i] = fac[i-1] * i % MOD


    ifac[-1] = pow(fac[-1], MOD - 2, MOD) 

    for i in range(N-2, -1, -1):
        ifac[i] = ifac[i+1] * (i+1) % MOD

def factorize(x):
    factors = []
    while x != 1:
        factors.append(spf[x])
        x //= spf[x]
    return factors

def is_prime(x):
    return x > 1 and sieve[x] == 0

def comb(n , r):
    return fac[n] * ifac[r] % MOD * ifac[n - r] % MOD

def perm(n  ,r):
    return fac[n] * ifac[n - r] % MOD


input = sys.stdin.readline

take_int = lambda: int(input())
take_line = lambda: map(int, input().split())
take_list = lambda: list(map(int, input().split()))
take_string = lambda: list(input().strip().split())
print_list = lambda x: print(*x)


def solve(): 
    n = take_int()
    arr = take_list()

    for i in range(n):
        arr[i] -= 1


    seen = set()
    par = dd(int)
    for i in range(n):
        if i in seen:
            continue
        curr = i
        ele = []
        while curr != arr[curr]:
            seen.add(curr)
            ele.append(curr)
            curr = arr[curr]

        par[tuple(ele)] = curr


    s = [(i + 1) for i in range(n)]
    for k , f in par.items():
        if not k:
            continue
        for x in k:
            s[x] = f + 1

    print_list(s)






solve()

# t = take_int()
# for _ in range(t):
#     solve()

Submission Info

Submission Time
Task C - Sugoroku Destination
User Maddy_22
Language Python (PyPy 3.11-v7.3.20)
Score 300
Code Size 2399 Byte
Status AC
Exec Time 844 ms
Memory 344396 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 300 / 300
Status
AC × 3
AC × 18
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 162 ms 135136 KiB
00_sample_01.txt AC 163 ms 135284 KiB
00_sample_02.txt AC 165 ms 135236 KiB
01_random_03.txt AC 836 ms 305308 KiB
01_random_04.txt AC 830 ms 312576 KiB
01_random_05.txt AC 809 ms 304964 KiB
01_random_06.txt AC 819 ms 305024 KiB
01_random_07.txt AC 827 ms 308192 KiB
01_random_08.txt AC 819 ms 303716 KiB
01_random_09.txt AC 810 ms 296080 KiB
01_random_10.txt AC 844 ms 304016 KiB
01_random_11.txt AC 389 ms 195008 KiB
01_random_12.txt AC 361 ms 193992 KiB
01_random_13.txt AC 735 ms 278128 KiB
01_random_14.txt AC 210 ms 150148 KiB
01_random_15.txt AC 805 ms 306648 KiB
01_random_16.txt AC 168 ms 135332 KiB
01_random_17.txt AC 585 ms 344396 KiB