Дорога на олимпиаду | 프로그래밍의 벗 PivotOJ
PivotOJ

Дорога на олимпиаду

시간 제한: 2000ms메모리 제한: 1024MB출처: MOOI 2017-18 quallongBOJ 30735

문제

Успешно решив все задачи отборочного этапа, Миша получил приглашение принять участие в очном туре Закрытой олимпиады школьников по информатике. Миша планирует добираться до места проведения олимпиады самолётами, при этом он хочет совершить не более одной пересадки, то есть использовать не более двух рейсов. Разумеется, среди всех таких вариантов его интересует самый дешёвый.

Жюри Закрытой олимпиады держит место и дату проведения очного этапа олимпиады в строжайшем секрете, а Миша очень любит путешествовать, поэтому не может заранее знать, из какого города он будет начинать свой путь. Кроме того, периодически появляются новые регулярные рейсы, а некоторые старые наоборот исчезают из расписания, поэтому Миша просит вас написать программу, которая будет отвечать на следующие запросы:

  1. Добавить новый регулярный рейс.
  2. Удалить некоторый рейс.
  3. Определить минимальную стоимость маршрута между двумя городами, если рассматривать только маршруты без пересадок и маршруты с одной пересадкой.

Каждый рейс связывает некоторую пару городов uiu_i и viv_i, и имеет свою стоимость cic_i. Все рейсы двусторонние, то есть позволяют добраться как из города uiu_i в город viv_i, так и наоборот, из города viv_i в город uiu_i.

입력

В первой строке входных данных записаны два целых числа nn и mm (2n1000002 \leq n \leq 100\,000, 0m1000000 \leq m \leq 100\,000) --- количество городов и количество уже доступных рейсов соответственно.

Следующие mm строк описывают имеющиеся рейсы. В ii-й из этих строк записаны три целых числа uiu_i, viv_i и cic_i (1ui,vin1 \leq u_i, v_i \leq n, uiviu_i \ne v_i, 0ci1090 \le c_i \le 10^9) --- номера городов, которые связывает ii-й регулярный рейс, и его стоимость.

В следующей строке записано одно целое число qq (1q1000001 \leq q \leq 100\,000) --- количество запросов.

Каждая из последующих qq строк содержит описание запроса в одном из трёх форматов:

  • 1uivici1\, u_i\, v_i\, c_i (1ui,vin1 \leq u_i, v_i \leq n, uiviu_i \ne v_i, 0ci1090 \le c_i \le 10^9) соответствует добавлению регулярного рейса между городами uiu_i и viv_i стоимостью cic_i.
  • 2uivi2\, u_i\, v_i (1ui,vin1 \leq u_i, v_i \leq n, uiviu_i \ne v_i) соответствует отмене регулярного рейса между городами uiu_i и viv_i. Гарантируется, что в момент поступления такого запроса, города uiu_i и viv_i соединены регулярным рейсом.
  • 3uivi3\, u_i\, v_i (1ui,vin1 \leq u_i, v_i \leq n, uiviu_i \ne v_i) означает, что Миша хочет знать самый дешёвый способ добраться из города uiu_i в город viv_i, при условии использования не более, чем одной пересадки.

Гарантируется, что в любой момент времени между каждой парой городов существует не более одного регулярного рейса. Дополнительно гарантируется, что во входных данных присутствует хотя бы один запрос третьего типа.

출력

Для каждого запроса третьего типа выведите минимальную стоимость поездки с использованием не более одной пересадки. Если между указанной парой городов вовсе не существует подходящих маршрутов, то выведите 1-1.

힌트

Рассмотрим пример. Для запросов третьего типа перечислим оптимальные маршруты в порядке появления этих запросов во входных данных:

  1. Через город 22 (хотя существует и прямой рейс, он не является наиболее выгодным маршрутом).
  2. Через город 33.
  3. Через город 22.
  4. Через город 33.
  5. Подходящего маршрута не существует.
  6. Прямой рейс.
  7. Через город 11.
  8. Через город 44.
  9. Подходящего маршрута не существует.

예제

예제 1

입력
5 6
1 2 3
1 3 8
2 3 4
2 4 7
3 4 1
4 5 7
13
3 1 3
3 1 4
2 1 3
3 1 4
1 1 3 0
3 1 4
3 1 5
3 3 4
1 1 4 1
3 2 4
3 2 5
2 4 5
3 2 5
출력
7
9
10
1
-1
1
4
14
-1
이 문제는 채점 준비 중입니다. 테스트 데이터가 확보되면 제출이 가능합니다.