ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 31414 |
문제명 | 주둔 |
레벨 | 플래티넘 5 |
분류 |
그래프 |
시간복잡도 | O(n) |
인풋사이즈 | n<100,000 |
사용한 언어 | Python 3.11 |
제출기록 | 41844KB / 92ms |
최고기록 | 92ms |
해결날짜 | 2024/02/21 |
출처 |
"""Solution code for "BOJ 31414. 주둔".
- Problem link: https://www.acmicpc.net/problem/31414
- Solution link: http://www.teferi.net/ps/problems/boj/31414
Tags: [graph]
"""
def main():
N = int(input())
d = [int(x) - 1 for x in input().split()]
answer = N
comp_no = [None] * N
dist = [None] * N
for source in range(N):
if comp_no[source] is not None:
continue
cur = source
for cur_dist in range(N + 1):
if comp_no[cur] is not None:
break
comp_no[cur], dist[cur] = source, cur_dist
cur = d[cur]
if comp_no[cur] == source:
length = cur_dist - dist[cur]
if length == 2 or length % 2 == 1:
answer -= 1
print(answer)
if __name__ == '__main__':
main()