연습문제
[HSAT 6회 정기 코딩 인증평가 기출] 출퇴근길
- 난이도
- Lv. 3
- 제출
- 6,866 명
- 참가자
- 2,097 명
- 정답률
- 20.49 %
- 지원 언어
-
CC++JavaPythonJavaScript
로그인 후 문제풀이가 가능합니다.
언어별 시간/메모리
언어 | 시간 | 메모리 |
---|---|---|
JavaScript | 4초 | 1024MB |
C | 2초 | 1024MB |
C++ | 2초 | 1024MB |
Java | 4초 | 1024MB |
Python | 4초 | 1024MB |
자동차로 출퇴근을 하는 동환이는 지루하지 않게 종종 길을 바꿔 다니곤 한다. 새로운 동네를 발견하는 일은 동환이의 소소한 행복이다.
동환이의 출근길과 퇴근길은 가끔 겹친다. 즉, 출근길에 들른 동네를 퇴근길에 다시 지나곤 하는 것이다. 이에 대해 곰곰이 생각하던 동환이는 이렇게 두 번 들를 수 있는 동네가 그렇게 많지 않음을 깨달았다. 도로의 연결 모양, 그리고 일방통행 여부 등으로 인해 출퇴근길 모두 방문 가능한 동네가 한정되는 것이다.
동환이의 출퇴근길은 단방향 그래프로 나타낼 수 있다. 즉, 각 동네를 1부터 n까지의 번호가 매겨진 n개의 정점으로, m개의 일방통행의 도로를 단방향 간선으로 삼아 그래프를 만들 수 있다. 이때 동환이의 집과 회사가 각각 정점 S와 T로 나타난다고 하면 출퇴근길은 S와 T 사이의 경로로 나타난다.
동환이의 출퇴근길을 본딴 그래프가 주어지면 S에서 T로 가는 출근길 경로와 T에서 S로 가는 퇴근길 경로에 모두 포함될 수 있는 정점의 개수를 세는 프로그램을 작성하시오.
단, 출퇴근길에서 목적지 정점을 방문하고 나면 동환이는 더 이상 움직이지 않는다. 즉, 출근길 경로에 T는 마지막에 정확히 한 번만 등장하며, 퇴근길 경로도 마찬가지로 S는 마지막에 한 번만 등장해야 한다. (출근길 경로에 S는 여러 번 등장해도 되고, 퇴근길 경로에 T는 여러 번 등장해도 된다.)
제약조건
* 5 ≤ n ≤ 100,000
* 5 ≤ m ≤ 200,000
* 1 ≤ S ≤ n이고 1 ≤ T ≤ n이며 S ≠ T
* S에서 T로 가는 경로와 T에서 S로 가는 경로가 하나 이상 존재함이 보장된다.
* 간선의 양 끝 점은 서로 다르다.
* 같은 정점쌍을 같은 방향으로 잇는 간선은 두 개 이상 주어지지 않는다.
입력형식
첫째 줄에 정점과 간선의 개수를 나타내는 두 정수 n과 m이 주어진다. 이어 m개의 줄에는 간선의 정보를 나타내는 두 정점의 번호 xi와 yi가 주어진다. 이는 xi에서 yi로 가는 단방향 간선이 존재함을 의미한다. 마지막 줄에는 동환이의 집과 회사의 위치에 해당하는 정점 번호 S와 T가 주어진다.
출력형식
첫째 줄에 출근길과 퇴근길 모두에서 방문 가능한 정점의 개수를 출력한다.
입력예제1
5 9 1 2 1 4 2 1 2 3 3 4 3 5 4 1 4 3 5 1 1 3
출력예제1
1
출퇴근길에 모두 방문 가능한 점은 4번뿐이다.
입력예제2
8 14 1 2 1 5 1 7 2 3 3 1 4 1 4 2 5 4 5 8 6 2 6 3 7 1 7 6 8 7 6 5
출력예제2
4
출퇴근길에 모두 방문 가능한 점은 1, 2, 3, 7의 네 개이다.