Codeforces Round 775 (Div. 1, по задачам Открытой олимпиады школьников по программированию) |
---|
Закончено |
Для того чтобы сделать столицу Берляндии более привлекательным туристическим местом, великий король придумал следующий план: выбрать две улицы города и назвать их проспектами. Естественно, эти проспекты будут объявлены чрезвычайно важными историческими местами, что должно привлечь туристов со всего мира.
Столицу Берляндии можно представить в виде графа, вершинами которого являются перекрестки, а ребрами являются улицы, соединяющие два перекрестка напрямую. Всего в графе $$$n$$$ вершин и $$$m$$$ ребер, по любой улице можно двигаться в обоих направлениях, от любого перекрестка можно добраться до любого другого, перемещаясь только по улицам, каждая улица соединяет два различных перекрестка, и никакие две улицы не соединяют одинаковую пару перекрестков.
Чтобы снизить поток обычных горожан, перемещающихся по великим проспектам, было решено ввести платный проезд по каждому их них в обе стороны. Теперь за один проезд по проспекту нужно заплатить $$$1$$$ тугрик. За проезд по остальным улицам платить не нужно.
Аналитики собрали выборку из $$$k$$$ горожан, $$$i$$$-му из них надо ездить на работу от перекрестка $$$a_i$$$ к перекрестку $$$b_i$$$. После выбора двух проспектов каждый горожанин будет добираться на работу вдоль пути, стоимость которого будет минимальна.
Для того чтобы заработать как можно больше денег, было решено выбрать в качестве двух проспектов две такие улицы, что суммарное количество тугриков, которые заплатят эти $$$k$$$ горожан, будет максимально возможным. Помогите королю: по заданной схеме города и выборке горожан найдите, какие две улицы нужно сделать проспектами, и сколько тугриков заплатят горожане при таком выборе.
Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \leq t \leq 10^5$$$) — количество наборов входных данных.
В первой строке описания каждого набора входных данных находятся два целых числа $$$n$$$ и $$$m$$$ ($$$3 \leq n \leq 500\,000$$$, $$$n - 1 \leq m \leq 500\,000$$$, $$$m \le \frac{n (n - 1)}{2}$$$) — количество перекрестков и улиц города.
В следующих $$$m$$$ строках содержатся описания улиц, в $$$i$$$-й строке находятся два целых числа $$$s_i$$$ и $$$f_i$$$ ($$$1 \leq s_i, f_i \leq n$$$, $$$s_i \neq f_i$$$) — номера перекрестков, которые соединяет $$$i$$$-я улица. Гарантируется, что никакие две улицы не соединяют одну и ту же пару перекрестков, и что от любого перекрестка можно добраться до любого другого, перемещаясь только по улицам.
В следующей строке находится единственное целое число $$$k$$$ ($$$1 \leq k \leq 500\,000$$$) — количество горожан в выборке.
В следующих $$$k$$$ строках содержатся описания горожан, в $$$i$$$-й строке находятся два целых числа $$$a_i$$$ и $$$b_i$$$ ($$$1 \leq a_i, b_i \leq n$$$, $$$a_i \neq b_i$$$) — $$$i$$$-й горожанин едет на работу от перекрестка $$$a_i$$$ до перекрестка $$$b_i$$$.
Пусть $$$M$$$ обозначает сумму значений $$$m$$$ по всем наборам входных данных, а $$$K$$$ означает сумму значений $$$k$$$ по всем наборам входных данных. Гарантируется, что $$$M, K \le 500\,000$$$.
Для каждого набора входных данных в выведите ответ на задачу.
В первой строке ответа данных выведите суммарное количество тугриков, которое заплатят горожане.
Во второй строке ответа выведите два целых числа $$$x_1$$$ и $$$y_1$$$ — номера перекрёстков, дорогу между которыми нужно сделать первым проспектом.
В третей строке ответа выведите два целых числа $$$x_2$$$ и $$$y_2$$$ — номера перекрёстков, дорогу между которыми нужно сделать вторым проспектом.
Номера перекрестков, соединенных улицей, можно выводить в произвольном порядке, каждая из двух выведенных улиц должна встречаться среди $$$m$$$ улиц города, выбранные улицы должны быть различными.
36 51 22 32 44 54 631 65 32 55 51 22 33 44 55 161 51 31 32 42 55 38 101 22 33 44 55 66 77 87 11 83 642 53 72 57 8
5 4 2 5 4 5 1 5 3 2 3 7 6 2 3
Название |
---|