RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
문제 JOI00232

船旅

설명

JOI国には,n 島の島があり,
各島には 1 から n までの番号が付けられている.
現在,JOI国では各島の間を結ぶ航路網の整備が進んでいる.

あなたは,船舶の切符を扱っているチケットセンターに勤務している.JOI国には船舶を使って,できる限り安価に,
島と島の間を旅行したいと考えている人が沢山おり,
彼らは,出発地と目的地を注文票に記入して,あなたのところに送ってくる.

あなたの仕事は,客から注文票を受け取ったらすぐに,
いくつかの船舶を乗り継いで,
出発地と目的地を結ぶ航路の中で,
もっとも安価な運賃を計算し,客に伝えることである.

ただし,旅程によっては,船舶を使って旅行することが出来ない場合もある.
そのときは『船舶を使って旅行することが出来ない』と客に伝える必要がある.
また,JOI国では,島と島の間を結ぶ新しい船舶が,次々と運航を開始しており,
あなたには,その情報が随時伝えられる.
客に返事をする際には,最新の情報に留意しなければならない.

入力として,客の注文票や新たに運航を開始した船舶の運航情報が与えられたときに,
客への返事を求めるプログラムを作成せよ.

なお,入力例1と出力例1に対する実行状況を,図1として図示している.

제약
입력 형식

入力の 1 行目には2つの整数 n, k (1 ≦ n ≦ 100, 1 ≦ k ≦ 5000) が書かれている.
これは,島の数が n 島で,入力が k + 1 行からなることを表す.

i + 1 行目 (1 ≦ i ≦ k) には,
3 個または 4 個の整数が空白を区切りとして書かれている.

最初の数字が 0 のとき,この行は客の注文票を表す.

この行には3個の整数 0, a, b (1 ≦ a ≦ n, 1 ≦ b ≦ n, a ≠ b)
が空白を区切りとして書かれている.

これは,客が,島 a を出発地とし島 b を目的地とするような注文票を送ってきたことを表す.

最初の数字が 1 のとき,この行は新たに運航を開始した船舶の運航情報を表す.

この行には 4 個の整数 1, c, d, e (1 ≦ c ≦ n, 1 ≦ d ≦ n, c ≠ d, 1 ≦ e ≦ 1000000)
が書かれている.

これは島 c と島 d を往復する船舶が新たに運航を開始し,
この船舶の島 c から島 d への運賃と,島 d から島 c への運賃が,共に e であることを表す.

この行以降の注文票に対しては,この船舶も考慮して返事をしなければならない.

最初の段階では,船舶は一隻も運航していないものとする.
入力のうち,船舶の運航情報を表す行は 1000 行以下である.
また,島と島の間に,複数の船舶が運航することがあることに注意せよ.

출력 형식

入力のうち,注文票を表す行の数を m とおく.

提出する出力ファイルは m 行からなり,
i 行目(1 ≦ i ≦ m)には,
i 番目の注文票に対する返事を表す整数を書く.

すなわち,
i 番目の注文票の出発地と目的地の間を,いくつかの船舶を乗り継いで旅行することが可能ならば,
その運賃の合計の最小値を書く.
旅行することが不可能ならば,-1 を書く.

예제 1
입력
3 8
1 3 1 10
0 2 3
1 2 3 20
1 1 2 5
0 3 2
1 1 3 7
1 2 1 9
0 2 3
출력
-1
15
12
문제 정보

생성자가 기록되지 않았습니다.

출처 JOI 2008 Preliminary

평가 및 의견

船旅

개요
출제자 난이도 Unrated 레이팅 미적용 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

船旅

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8