만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

고장 난 로봇

면접 대비

시간 제한2초메모리 제한512 MB

요약
각 노드에서 나가는 강제 이동 간선이 최대 하나인 방향 그래프에서, 로봇이 규칙을 많아야 한 번 어기면서 이동할 때 최종적으로 멈출 수 있는 노드의 수를 구한다.
난이도

보통10점 중 6점

유형
그래프, DFS, 시뮬레이션, 완전 탐색
정답자
아직 제출이 없습니다

문제

앨리스는 수업 과제로 로봇이 그래프를 탐색하도록 프로그래밍했다. 그래프에는 1,2,…,n1, 2, \dots, n으로 번호가 붙은 정점 nn개와 방향 간선 mm개가 있고, 로봇은 정점 1에서 출발한다.

한 정점에서 나가는 간선은 여러 개일 수 있다. 앨리스는 정점마다 이웃 하나를 강제 이동 대상으로 지정해 둘 수 있다. 예를 들어 정점 5에서 이웃 1, 4, 6으로 나가는 간선이 있더라도 앨리스가 강제 이동을 4로 지정했다면, 로봇은 5를 떠날 때 4로 가야 한다.

로봇이 정상이라면 강제 이동이 지정된 정점에서는 언제나 그 이동을 따르고, 강제 이동이 없는 정점에 도착하면 멈춘다. 그런데 이 로봇에는 결함이 있어서 규칙을 어기고 그 정점의 이웃 중 아무 곳으로나 이동하기도 한다. 그 정점에 강제 이동이 지정되어 있든 없든 마찬가지다. 이런 오작동은 많아야 한 번 일어나고, 한 번도 일어나지 않기도 한다.

앨리스는 로봇을 디버깅하다 막혔다. 로봇이 더 이상 움직이지 않고 멈출 수 있는 정점이 어디인지 알아내 앨리스를 도와주자.

그림 1과 그림 2는 예제 그래프 두 개다. 빨간 화살표는 강제 이동에 해당하는 간선이고, 검은 화살표는 그 밖의 간선이다. 정점을 감싼 원이 빨간색이면 로봇이 멈출 수 있는 정점이다.

그림 1: 첫 번째 예제 그래프.그림 2: 두 번째 예제 그래프.

첫 번째 그래프에서 오작동이 없으면 로봇은 정점 1, 5, 4를 끝없이 돈다. 오작동으로 1에서 2로 건너뛸 수 있는데, 오작동은 이 한 번뿐이므로 로봇은 2에서 더 움직이지 않는다. 5에서 6으로 건너뛴 다음 강제 이동을 따라 7에서 멈출 수도 있다.

두 번째 그래프에는 강제 이동이 없으므로, 오작동이 없으면 로봇은 1에 그대로 머문다. 오작동으로 1에서 2나 3으로 갈 수도 있고, 그러면 그 자리에서 멈춘다.

입력

첫째 줄에 정점의 개수 nn과 간선의 개수 mm이 주어진다. (1≤n≤10001 \le n \le 1000, 0≤m≤100000 \le m \le 10000)

다음 mm개 줄에는 각각 두 정수 aa와 bb가 주어진다. (1≤∣a∣,b≤n1 \le |a|, b \le n, ∣a∣≠b|a| \ne b) a>0a > 0이면 정점 aa에서 정점 bb로 가는, 강제 이동이 아닌 방향 간선이 있다. a<0a < 0이면 정점 −a-a에서 정점 bb로 가는 강제 이동 간선이 있다. 강제 이동은 많아야 900개다. 같은 방향 간선이 두 번 주어지는 일은 없고, 강제 이동의 시작 정점도 서로 다르다.

출력

로봇이 멈출 수 있는 정점의 개수를 출력한다.

예제2

  1. 예제 1

    입력
    7 9
    1 2
    2 3
    -1 5
    2 6
    5 1
    -4 1
    5 6
    -6 7
    -5 4
    
    예상 출력
    2
    
  2. 예제 2

    입력
    3 2
    1 2
    1 3
    
    예상 출력
    3