과도한 출구

면접 대비

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

요약
방향 그래프가 주어질 때, 남은 그래프에 방향 순환이 없도록 전체 간선의 절반 이하를 골라 삭제하는 문제입니다.
난이도

보통10점 중 6점

유형
그래프, DFS, 그리디, 구현
정답자
아직 제출이 없습니다

문제

당신은 Boogie Always Persists Club이라는 디스코 클럽을 운영한다. 이 클럽은 서로 연결된 여러 개의 방에서 춤추고 소리지를 수 있는 것으로 유명하다. 방과 방 사이의 복도는 미로 같은 구조를 이루고 있으며, 보너스로 모든 복도를 일방통행으로 만들었다. 그러나 모든 사람이 당신만큼 클럽에 만족하는 것은 아니었다. 최근 소방 안전 검사관이 방문했는데, 그들이 본 것에 전혀 웃지 않았다. 방 중 하나에서 불이 나면 사람들이 비상구를 찾기 어려워하고 심지어 빙빙 돌며 뛰어다닐 수도 있다는 것이다. 검사관은 이를 용납할 수 없다고 판단하고 가능한 한 빨리 개선하라고 명령한다. 검사관은 방 사이의 복도 일부를 제거해서 클럽 안에서 아무도 빙빙 돌며 뛰어다닐 수 없도록 해야 한다고 주장한다.

반면 당신은 방의 매력을 유지하고 싶다. 복도를 너무 많이 제거하면 사람들이 더 이상 클럽을 찾지 않을 것이기 때문이다. 당신은 복도의 최대 절반까지 제거해도 된다고 결정한다.

클럽의 배치가 주어졌을 때, 사이클이 남지 않도록 복도의 최대 절반을 제거하라.

입력

  • 한 줄에 방의 수 1≤n≤1051 \le n \le 10^5와 복도의 수 0≤m≤2⋅1050 \le m \le 2 \cdot 10^5가 주어진다.
  • 그다음 mm개의 줄이 주어지며, 각 줄에는 서로 다른 1부터 시작하는 두 정수 uu와 vv가 주어진다. 이는 방 uu에서 방 vv로 가는 복도를 나타낸다. 방에서 자기 자신으로 가는 복도는 없으며, 한 방에서 다른 한 방으로 가는 복도가 두 개 이상 있는 경우도 없다.

출력

  • 첫 줄에 제거할 복도의 수 0≤r≤m/20 \le r \le m/2를 정수로 출력한다.
  • 그다음 rr개의 줄에 제거해야 하는 복도의 1부터 시작하는 번호를 출력한다. 이렇게 하면 디스코에서 더 이상 빙빙 돌며 춤출 수 없게 된다.

유효한 답이 여러 개라면 그중 아무거나 출력해도 된다.

예제

예제는 별도로 제공된다.

예제5

  1. 예제 1

    입력
    2 2
    1 2
    2 1
    
    예상 출력
    1
    2
    
  2. 예제 2

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

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

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

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