첫째 줄에 리스트의 길이 입력
두째 줄부터 N+1 줄까지 key에 대한 value 입력
key1 == key2_value && key2 == key1_value 조건을 만족하면서
첫 번째 줄에서 뽑은 집합과 두 번째 줄에서 뽑은 집합의 최대 길이와 요소들을 출력
사이클이 발생하는 모든 요소들을 체크하는 풀이 -> 깊이 우선 탐색
key | 해당 key값을 value로 받는 key 리스트 |
---|---|
1 | 2, 3 |
2 | |
3 | 1 |
4 | 6 |
5 | 4, 5 |
6 | 7 |
7 |
N = int(input())
my_input = {key:[] for key in range(1, N+1)}
ans = set()
for key in range(1, N+1): my_input[key].append(int(input()))
def dfs(key, visited):
visited[key] = 1
for elem in my_input[key]:
if visited[elem] == 0: dfs(elem, visited)
else:
if elem not in ans:
ans.add(key)
ans.add(elem)
visited[elem] = 1
for key in range(1, N+1):
visited = [0]*(N+1)
dfs(key, visited)
ans = list(ans)
ans.sort()
print(len(ans))
for ans_ in ans: print(ans_)