The Chase


답안 제출

Points: 19
시간 제한: 2.0s
메모리 제한: 1G

문제 유형

베시는 농부들을 피해 도망치고 있다. 농부들은 \(N\)개의 농장을 소유하고 있으며 \((2 \le N \le 500,000)\), \(i\)번째 농장에서 \(a_i\)번째 농장으로 향하는 일방통행 도로가 하나 있다. \((1 \le i \le N,\ a_i \ne i)\)

농부는 \(F\)명이며 \((1 \le F \le N)\), \(i\)번째 농부는 처음에 \(s_i\)번째 농장에 있다. \((1 \le s_i \le N)\) 모든 \(s_i\)는 서로 다르다. 매 시간 단계마다 모든 농부는 현재 농장에 있는 도로를 따라 다음 농장으로 이동한다. 베시가 농부 중 한 명과 같은 농장에 있게 되는 순간 베시는 붙잡힌다.

베시가 어떤 농장 \(b\)에서 출발한다고 하자. 매 시간 단계마다 베시는 두 가지 행동 중 하나를 선택할 수 있다. 현재 농장에서 쉬거나, 도로를 따라 다음 농장으로 이동할 수 있다. 이동하기로 했다면 농부들과 동시에 이동한다. 베시는 어떤 유한한 시간 단계에서도 농부에게 붙잡히지 않도록 움직인다.

각 시작 농장 \(b\)에 대하여 \((1 \le b \le N)\), 베시가 \(b\)번째 농장에서 출발할 때 쉴 수 있는 최대 횟수를 구하여라.

입력

첫째 줄에 농장의 수 \(N\)과 농부의 수 \(F\)가 주어진다.

둘째 줄에 각 농장에서 나가는 일방통행 도로를 나타내는 \(a_1, \ldots, a_N\)이 주어진다.

셋째 줄에 각 농부의 시작 위치를 나타내는 \(s_1, \ldots, s_F\)가 주어진다.

출력

\(N\)개의 줄을 출력한다. \(b\)번째 줄에는 베시가 \(b\)번째 농장에서 출발할 때 쉴 수 있는 최대 횟수를 나타내는 정수 하나를 출력한다.

베시가 영원히 붙잡히지 않도록 할 방법이 없다면 \(-1\)을 출력한다. 베시가 무한히 많이 쉴 수 있다면 \(-2\)를 출력한다.

예제 입력

4 1
2 1 4 3
1

예제 출력

-1
0
-2
-2

예제 설명

농장 1: 베시가 농부가 있는 농장에서 출발하면 즉시 붙잡히므로 \(-1\)을 출력해야 한다.

농장 2: 베시는 \(1\)번 농장에서 출발한 농부에게 붙잡히지 않기 위해 매 시간 단계마다 반드시 이동해야 한다.

농장 3-4: 베시는 붙잡히지 않으면서 무한히 많이 쉴 수 있다.

출처

USACO 2026 Second Contest, Gold, Problem 3. The Chase


코멘트

현재 작성된 코멘트가 없습니다.