아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

회사

시간 제한1초메모리 제한128 MB

요약
사이클이 없는 조직도에서 모든 도달 관계를 그대로 유지하는 최소한의 직속 상사 관계를 골라 정렬해 출력한다.
난이도

보통10점 중 7점

유형
그래프, 위상 정렬, 그리디
정답자
아직 제출이 없습니다

문제

플럼소프트(Plumsoft) 회사에는 직원들 사이에 위계가 있어, 어떤 직원은 다른 직원의 상사이다. 직원 P1=A, P2, …, Pk=BP_1 = A,\ P_2,\ \dots,\ P_k = B 로 이루어진 사슬이 존재하여 P1P_1 이 P2P_2 의 상사, P2P_2 가 P3P_3 의 상사, …\dots, Pk−1P_{k-1} 이 PkP_k 의 상사이면, 사람 AA 는 사람 BB 를 관리한다고 한다. 플럼소프트는 매우 건전하게 운영되는 회사이므로, 서로가 서로를 관리하는 두 직원은 존재하지 않는다고 가정할 수 있다(위계에 순환이 없다).

경영진은 회의 비용을 줄이고자, 기존의 직접적인 "AA 는 BB 의 상사" 관계 중 일부만 남기려 한다. 단, 모든 "AA 는 BB 를 관리한다" 관계는 그대로 유지되어야 한다. 누가 누구를 관리하는지 전혀 바뀌지 않도록 하면서, 남기는 직접적인 "상사" 관계의 수를 최소로 하도록 도와라.

입력

첫째 줄에 두 정수 NN 과 MM 이 공백으로 구분되어 주어진다 (1≤N≤10001 \le N \le 1000, 1≤M≤100001 \le M \le 10000). NN 은 직원의 수, MM 은 회사의 직접적인 "상사" 관계의 수이다. 직원은 11 번부터 NN 번까지 번호가 매겨져 있다. 이어지는 MM 개의 줄 각각에는 두 번호 AA 와 BB 가 공백으로 구분되어 주어지며, 이는 AA 가 BB 의 상사임을 뜻한다.

출력

첫째 줄에, 모든 "관리한다" 관계가 유지되도록 남겨야 하는 직접적인 "상사" 관계의 최소 개수 MminM_{min} 을 출력한다. 그다음 MminM_{min} 개의 줄에, 남긴 관계들을 한 줄에 하나씩 두 번호 AA 와 BB(여전히 AA 가 BB 의 상사임)를 공백으로 구분하여 출력한다. 관계는 오름차순으로, 먼저 AA 를 기준으로, AA 가 같으면 BB 를 기준으로 정렬하여 출력한다.

예제2

  1. 예제 1

    입력
    5 8
    3 5
    1 4
    4 3
    1 3
    4 5
    1 2
    1 5
    2 3
    
    예상 출력
    5
    1 2
    1 4
    2 3
    3 5
    4 3
    
  2. 예제 2

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