무빙워크
시간 제한2초메모리 제한1024 MB
각 무빙워크의 전원을 켜거나 꺼서 1번 건물에서 모든 건물로 도달 가능하게 유지하면서 최단 거리 합의 최솟값과 전원 상태를 구한다.
문제
UDP 시티는 개의 건물과 각 건물을 잇는 개의 무빙워크로 이루어져 있다. 각 건물과 무빙워크에는 번부터 차례로 번호가 매겨져 있다. 포닉스는 각 무빙워크의 전원을 끄거나 켤 수 있다. 무빙워크는 전원 상태에 따라 아래와 같이 동작한다.
- 번째 무빙워크의 전원이 켜져 있는 경우, 번 건물에서 번 건물로의 방향으로만 이동할 수 있다. 이 경우 이동 시간은 이다.
- 번째 무빙워크의 전원이 꺼져 있는 경우, 번 건물과 번 건물 사이를 방향에 관계없이 이동할 수 있다. 이 경우 이동 시간은 이다.
포닉스는 현재 번 건물에 있으며, 각 무빙워크의 전원을 적절히 조작해 다른 모든 건물에 대한 최단 도달 시간의 합을 최소화하려 한다. 이때 번 건물에서 도달할 수 없는 건물이 존재해서는 안 된다.
도달할 수 없는 건물이 존재하지 않는 모든 경우에 대해서 모든 건물에 대한 최단 도달 시간의 합의 최솟값과 이때 각 무빙워크의 전원 상태를 구해 보자.
입력
첫째 줄에 건물의 개수 , 무빙워크의 개수 이 공백으로 구분되어 주어진다.
둘째 줄부터 개의 줄에 걸쳐 세 정수 가 공백으로 구분되어 주어진다. 이는 번째 무빙워크의 전원이 켜져 있을 때 번 건물에서 번 건물으로 이동하는 것이 가능하며 의 이동 시간을 가짐을 의미한다.
모든 무빙워크의 전원을 껐을 때, 번 건물에서 다른 모든 건물로 도달할 수 있음이 보장되며 서로 다른 무빙워크에 대해 쌍은 서로 다르다.
출력
첫째 줄에 가능한 최단 도달 시간 합의 최솟값을 출력한다.
둘째 줄에는 각 무빙워크의 전원 상태를 나타내는 정수 을 공백으로 구분해 출력한다. 는 번째 무빙워크의 전원을 켜야 할 경우 , 꺼야 할 경우 이다. 가능한 전원 상태가 여러 개일 경우 그 중 아무것이나 출력하여라.