팬 그룹

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

요약
방향 그래프와 각 도로에서 충돌이 있었는지가 주어질 때, 표시된 충돌과 일치하는 가장 사전순으로 앞선 그룹 순서를 출력하거나 -1을 출력한다.
난이도

어려움10점 중 8점

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

문제

한 도시에 11번부터 nn번까지 번호가 매겨진 광장 nn개가 있고, 이들을 잇는 일방통행 도로 mm개가 있습니다. 이 도시에는 축구 팬 그룹도 nn개 있으며, 팬 그룹 ii의 본부는 광장 ii에 있습니다.

어느 날 팬 그룹들은 "도시 투어"를 벌입니다. 미리 정해 둔 순서에 따라 그룹들이 한 번에 하나씩 광장을 점령해 나갑니다. 처음에는 어떤 광장도 점령되어 있지 않습니다. 그룹들은 엄격히 차례대로 움직이며, 한 그룹은 바로 앞 그룹이 자기 차례를 끝낸 뒤에야 시작합니다.

팬 그룹 ii의 차례가 되면:

  • 광장 ii가 이미 다른 그룹 j≠ij \ne i에게 점령되어 있다면, 그룹 ii는 아무것도 하지 않습니다.
  • 그렇지 않다면, 그룹 ii는 광장 ii를 점령한 뒤 퍼져 나갑니다. 어떤 광장 vv를 점령할 때마다 그룹은 vv에서 나가는 모든 도로로 팬들을 보냅니다. 도로 v→wv \to w에 대해: ww가 이미 다른 그룹에게 점령되어 있으면 지나갈 수 없어 그 도로에서 싸움이 벌어집니다. ww가 아직 점령되지 않았으면 그룹은 ww도 점령하고 거기서부터 계속 퍼져 나갑니다.
  • 더 이상 도달할 수 있는 빈 광장이 없으면 차례가 끝납니다.

두 그룹은 싸움이 벌어진 도로에서 정확히 마주치므로, 싸움 기록은 어느 도로가 막혔는지를 그대로 알려 줍니다. 도시 지도와 함께 각 도로에서 싸움이 일어났는지 여부가 주어질 때, 그룹들이 움직였을 수 있는 순서를 복원하세요.

입력

첫째 줄에 광장의 수 nn과 일방통행 도로의 수 mm이 주어집니다. 다음 mm개의 줄에는 각각 세 정수 aa, bb, cc가 주어지며, 이는 광장 aa에서 광장 bb로 가는 일방통행 도로를 나타냅니다. c=1c = 1이면 이 도로에서 싸움이 일어났고, c=0c = 0이면 일어나지 않았습니다. 서로 다른 두 광장 사이에는 같은 방향의 도로가 최대 하나만 존재합니다.

출력

싸움이 표시된 도로들에서만 정확히 일어나도록 하는 움직임 순서가 존재하지 않으면 −1-1을 출력합니다.

그렇지 않으면 한 줄에, 유효한 순서 중 사전순으로 가장 앞서는 것을 출력합니다. 즉 11부터 nn까지의 순열 P1 P2 … PnP_1\ P_2\ \dots\ P_n을 공백 하나로 구분하여 출력하며, 이는 광장 P1P_1의 그룹이 가장 먼저, 그다음 광장 P2P_2의 그룹, ... 순으로 움직였음을 뜻합니다. 유효한 순서가 여러 개라면 사전순으로 가장 작은 수열을 출력합니다(P1P_1을 먼저 비교하고, 같으면 P2P_2를 비교하는 식).

제한

  • 2≤n≤20 0002 \le n \le 20\,000
  • 1≤m≤200 0001 \le m \le 200\,000
  • 1≤a,b≤n1 \le a, b \le n, a≠ba \ne b, c∈{0,1}c \in \{0, 1\}

힌트

광장 88개와 일방통행 도로 99개가 있고, 도로 1→41 \to 4, 1→81 \to 8, 7→47 \to 4, 7→17 \to 1에서 싸움이 기록된 경우를 생각해 봅시다. 유효한 움직임 순서 중 하나는 8,5,6,2,3,1,7,48, 5, 6, 2, 3, 1, 7, 4입니다:

  • 그룹 88이 먼저 움직여 광장 88을 점령합니다.
  • 그룹 55가 광장 55, 66, 44를 점령합니다(모두 빈 광장을 통해 도달 가능).
  • 그룹 66은 자기 광장이 이미 점령되어 있어 아무것도 하지 않습니다.
  • 그룹 22가 광장 22와 33을 점령합니다.
  • 그룹 33은 아무것도 하지 않습니다.
  • 그룹 11이 광장 11을 점령합니다. 도로 1→41 \to 4와 1→81 \to 8은 이미 점령된 광장으로 향하므로 그곳에서 싸움이 벌어집니다.
  • 그룹 77이 광장 77을 점령합니다. 도로 7→17 \to 1과 7→47 \to 4도 이미 점령된 광장으로 향하므로 그곳에서 싸움이 벌어집니다.
  • 그룹 44는 아무것도 하지 않습니다.

이 순서는 기록된 네 싸움만 정확히 만들어 내므로 유효합니다. 이 입력에는 유효한 순서가 여러 개 있으며(예: 2,3,8,4,1,7,5,62, 3, 8, 4, 1, 7, 5, 6도 유효합니다), 요구되는 답은 그중 사전순으로 가장 작은 2 3 4 5 6 8 1 72\ 3\ 4\ 5\ 6\ 8\ 1\ 7입니다. 반면 순서 8,5,6,3,2,1,7,48, 5, 6, 3, 2, 1, 7, 4는 표시되지 않은 도로 2→32 \to 3에서 싸움을 만들어 내므로 유효하지 않습니다.

예제4

  1. 예제 1

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

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

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

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