#P12633. 「OOI 2022 Day 1」两条大街

「OOI 2022 Day 1」两条大街

题目描述

为了让伯兰迪亚的首都成为更具吸引力的旅游目的地,伟大的国王制定了一个计划:选择城市中的两条街道,并将它们命名为大街。当然,这些大街将被宣布为极其重要的历史遗迹,这应该会吸引来自世界各地的游客。

伯兰迪亚的首都可以表示为一个图,图的顶点是路口,边是直接连接两个路口的街道。图中共有 nn 个顶点和 mm 条边,每条街道都可以双向通行,从任意一个路口可以仅通过街道到达任意另一个路口,每条街道连接两个不同的路口,且没有两条街道连接相同的路口对。

为了减少普通市民在大街上的通行流量,决定对每条大街的双向通行收取费用。现在,每次通过大街需支付 11 个图格里克,而通过其他街道则无需支付费用。

分析人员收集了 kk 个市民的样本数据,其中第 ii 个市民需要从路口 aia_i 前往路口 bib_i 上班。在选择两条大街后,每个市民将选择费用最小的路径前往上班。

为了尽可能多地赚取费用,决定选择两条街道作为大街,使得这 kk 个市民支付的图格里克总数最大化。请帮助国王:根据给定的城市布局和市民样本数据,找出应选择哪两条街道作为大街,以及在这种选择下市民将支付多少图格里克。

输入格式

每个测试点包含多组输入数据。第一行包含两个整数,第一个数字 tt (1t105)(1 \leq t \leq 10^{5})表示输入数据的组数,第二个数字 gg (0g7)(0 \leq g \leq 7) 表示子任务编号。接下来是各组数据的描述。

每组数据的第一行包含两个整数 nnmm $(3 \leq n \leq 500000, n-1 \leq m \leq 500000, m \leq \frac{n(n-1)}{2})$,分别表示城市中路口的数量和街道的数量。

接下来的 mm 行描述街道,第 ii 行包含两个整数 sis_ifif_i (1si,fin,sifi)(1 \leq s_i, f_i \leq n, s_i \neq f_i),表示第 ii 条街道连接的两个路口的编号。保证没有两条街道连接相同的路口对,且从任意一个路口可以仅通过街道到达任意另一个路口。

接下来的一行包含一个整数 kk (1k500000)(1 \leq k \leq 500000),表示样本中市民的数量。

接下来的 kk 行描述市民,第 ii 行包含两个整数 aia_ibib_i (1ai,bin,aibi)(1 \leq a_i, b_i \leq n, a_i \neq b_i),表示第 ii 个市民从路口 aia_i 前往路口 bib_i 上班。

MM 表示所有数据组中 mm 的总和,KK 表示所有数据组中 kk 的总和。保证 M,K500000M, K \leq 500000

输出格式

对于每组输入数据,输出问题的答案。

答案的第一行输出市民支付的图格里克总数。

答案的第二行输出两个整数 x1x_1y1y_1,表示应作为第一条大街的街道所连接的两个路口的编号。

答案的第三行输出两个整数 x2x_2y2y_2,表示应作为第二条大街的街道所连接的两个路口的编号。

连接街道的路口编号可以按任意顺序输出,每条输出的街道必须是城市中 mm 条街道之一,且两条选择的街道必须不同。

3 0
6 5
1 2
2 3
2 4
4 5
4 6
3
1 6
5 3
2 5
5 5
1 2
2 3
3 4
4 5
5 1
6
1 5
1 3
1 3
2 4
2 5
5 3
8 10
1 2
2 3
3 4
4 5
5 6
6 7
7 8
7 1
1 8
3 6
4
2 5
3 7
2 5
7 8

5
4 2
5 4
5
1 5
3 2
3
7 6
2 3

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖 备注
11 1414 n20n \leq 20m20m \leq 20K1000K \leq 1000 00 t100t \leq 100
22 1111 n100n \leq 100M2000M \leq 2000K2000K \leq 2000 010 \sim 1
33 1515 n2000n \leq 2000M20000M \leq 20000K20000K \leq 20000 020 \sim 2
44 1616 M100000M \leq 100000K100000K \leq 100000 030 \sim 3
55 1111 n=m+1n = m + 1
66 1919 每个路口恰好连接 22 条街道
77 1414 060 \sim 6