Traveling SCCC President 2
시간 제한3초메모리 제한1024 MB
1번에서 N번으로 가는 경로 중 사용한 도로 길이를 모두 bitwise OR한 값이 최소인 경로를 찾는다.
문제
숭실대학교 컴퓨터학부 문제해결 소모임 SCCC의 회장인 상원이는 정보과학관에서 형남공학관으로 이동해 대회 홍보 포스터를 붙이려고 한다.
숭실대학교의 캠퍼스는 번부터 번까지 번호가 붙어 있는 개의 건물과, 서로 다른 두 건물을 연결하고 번부터 번까지 번호가 붙어 있는 개의 도로로 구성되어 있다. 번째 도로는 번 건물과 번 건물을 연결하고, 이 도로의 길이는 이다. 두 건물 쌍을 연결하는 도로는 최대 한 개만 존재하며, 모든 건물은 도로를 통해 서로 이동할 수 있다. 정보과학관의 건물 번호는 번, 형남공학관의 건물 번호는 번이다.
일반적인 사람이라면 다른 건물로 이동할 때 사용한 도로 길이의 합 만큼의 시간이 소요되겠지만, 놀랍게도 상원이는 사용한 도로의 길이를 모두 bitwise OR 연산한 값 만큼의 시간이 소요된다. 상원이가 번 건물에서 번 건물로 이동할 때 걸리는 최소 시간을 구해주자.
bitwise OR 연산이 무엇인지 잘 모르는 친구들은 문제 지문 맨 아래에 친절한 정휘가 준비해 놓은 정의를 읽어보도록 하자.
입력
첫째 줄에 건물의 개수 과 도로의 개수 이 공백으로 구분되어 주어진다.
둘째 줄부터 개의 줄에 걸쳐, 번 도로가 연결하는 두 건물의 번호 와 도로의 길이 가 한 줄에 하나씩 공백으로 구분되어 주어진다.
출력
상원이가 번 건물에서 번 건물로 이동하는 데 필요한 최소 시간을 출력한다.
제한
- ,
- 면 , 이다. 즉, 연결하는 두 건물의 쌍이 같은 도로가 여러 개 존재하지 않는다.
- 모든 건물은 도로를 통해 이어져 있다.
- 입력으로 주어지는 수는 모두 정수이다.
힌트
두 정수 를 bitwise OR한 값 는 다음과 같이 정의된다.
- 이진법으로 생각했을 때, 의 의 자릿수와 의 의 자릿수 중 하나 이상이 1이면 의 의 자릿수가 1이고, 둘 다 0이면 의 의 자릿수는 0이다.
예를 들어 , 이므로 로 계산된다.
개의 정수 를 bitwise OR한 결과는 로 정의된다. 이 연산의 결과는 의 순서를 바꾸더라도 변하지 않음을 증명할 수 있다.
도로의 길이와 정답이 32비트 정수 범위를 벗어날 수 있으므로 C/C++에서는 long long 타입, Java에서는 long 타입을 사용하는 것을 권장한다.
입출력 양이 많으므로 문제지 2-4페이지의 언어 가이드에 있는 빠른 입출력을 사용하는 것을 권장한다.