포럼
문제 R00757

문제집

설명

\(1\)번부터 \(N\)번까지의 문제를 모두 풀려고 한다. "\(A\)번 문제는 \(B\)번 문제보다 먼저 푸는 것이 좋다"는 조건 \(M\)개가 주어진다.

다음 규칙을 지키며 문제를 푸는 순서를 구하여라.

  1. \(N\)개의 문제를 모두 푼다.
  2. 먼저 푸는 것이 좋은 문제가 있으면, 그 문제를 먼저 푼다.
  3. 가능하면 쉬운 문제(번호가 작은 문제)부터 푼다.

즉, 조건을 만족하는 순서 중 사전순으로 가장 앞서는 것을 구하면 된다.

제약

\(1 \le N \le 32\,000\), \(0 \le M \le 100\,000\).

입력 형식

첫째 줄에 \(N\)\(M\)이 주어진다. 다음 \(M\)개의 줄에 두 정수 \(A\ B\)가 주어진다 — \(A\)번을 \(B\)번보다 먼저 푸는 것이 좋다는 뜻이다. 항상 모든 문제를 풀 수 있는 경우(사이클이 없는 경우)만 주어진다.

출력 형식

문제를 풀 순서를 공백으로 구분해 한 줄에 출력한다.

예제 1
입력
4 2
4 2
3 1
출력
3 1 4 2
설명

\(3\)\(1\)보다, \(4\)\(2\)보다 먼저 풀어야 한다. 사전순 최소는 \(3\ 1\ 4\ 2\).

예제 2
입력
3 0
출력
1 2 3
설명

조건이 없으면 번호 순서대로 푼다.

힌트

막혔나요? 코인으로 단계별 힌트를 잠금 해제하세요 — 첫 힌트는 가벼운 방향 제시, 뒤로 갈수록 더 많이 알려 줍니다. 문제를 풀면 모든 힌트가 무료로 공개됩니다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

문제집

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 1 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

문제집

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8