무빙워크

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

요약
각 무빙워크의 전원을 켜거나 꺼서 1번 건물에서 모든 건물로 도달 가능하게 유지하면서 최단 거리 합의 최솟값과 전원 상태를 구한다.
난이도

어려움10점 중 8점

유형
그래프, 최단 경로, 최소 신장 트리, 그리디
정답자
아직 제출이 없습니다

문제

UDP 시티는 NN개의 건물과 각 건물을 잇는 MM개의 무빙워크로 이루어져 있다. 각 건물과 무빙워크에는 11번부터 차례로 번호가 매겨져 있다. 포닉스는 각 무빙워크의 전원을 끄거나 켤 수 있다. 무빙워크는 전원 상태에 따라 아래와 같이 동작한다.

  • ii번째 무빙워크의 전원이 켜져 있는 경우, u_iu\_i번 건물에서 v_iv\_i번 건물로의 방향으로만 이동할 수 있다. 이 경우 이동 시간은 d_id\_i이다.
  • ii번째 무빙워크의 전원이 꺼져 있는 경우, u_iu\_i번 건물과 v_iv\_i번 건물 사이를 방향에 관계없이 이동할 수 있다. 이 경우 이동 시간은 2d_i2d\_i이다.

포닉스는 현재 11번 건물에 있으며, 각 무빙워크의 전원을 적절히 조작해 다른 모든 건물에 대한 최단 도달 시간의 합을 최소화하려 한다. 이때 11번 건물에서 도달할 수 없는 건물이 존재해서는 안 된다.

도달할 수 없는 건물이 존재하지 않는 모든 경우에 대해서 모든 건물에 대한 최단 도달 시간의 합의 최솟값과 이때 각 무빙워크의 전원 상태를 구해 보자.

입력

첫째 줄에 건물의 개수 NN, 무빙워크의 개수 MM이 공백으로 구분되어 주어진다. (2≤N≤300 000;1≤M≤500 000)(2 \le N \le 300\ 000; 1 \le M \le 500\ 000)

둘째 줄부터 MM개의 줄에 걸쳐 세 정수 u_i,v_i,d_iu\_i, v\_i, d\_i가 공백으로 구분되어 주어진다. 이는 ii번째 무빙워크의 전원이 켜져 있을 때 u_iu\_i번 건물에서 v_iv\_i번 건물으로 이동하는 것이 가능하며 d_id\_i의 이동 시간을 가짐을 의미한다. (1≤u_i,v_i≤N;u_i≠v_i;1≤d_i≤106)(1 \le u\_i, v\_i \le N; u\_i \ne v\_i; 1 \le d\_i \le 10^6)

모든 무빙워크의 전원을 껐을 때, 11번 건물에서 다른 모든 건물로 도달할 수 있음이 보장되며 서로 다른 무빙워크에 대해 (u,v)(u, v) 쌍은 서로 다르다.

출력

첫째 줄에 가능한 최단 도달 시간 합의 최솟값을 출력한다.

둘째 줄에는 각 무빙워크의 전원 상태를 나타내는 정수 P_1,P_2,⋯ ,P_MP\_1, P\_2, \cdots , P\_M을 공백으로 구분해 출력한다. P_iP\_i는 ii번째 무빙워크의 전원을 켜야 할 경우 11, 꺼야 할 경우 00이다. 가능한 전원 상태가 여러 개일 경우 그 중 아무것이나 출력하여라.

예제4

  1. 예제 1

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

    입력
    3 3
    1 2 3
    2 3 4
    1 3 6
    
    예상 출력
    9
    1 1 1
    
  3. 예제 3

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

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