#P7500. 「HMOI R1」地铁客流

「HMOI R1」地铁客流

背景

一座城市的地铁客流量是非常重要的指标,它体现了这座城市正在不断流动着的人口数量。无论通勤还是旅游,都会给这座城市的经济带来活力。

疫情期间各地地铁客流惨淡,甚至有部分城市地铁停运。现在疫情态势好转,各地陆续复工复产,地铁客流量大小也是判断城市复工复产、经济恢复率的重要参考。

题目描述

天穹市的地铁系统由 MM 条线路组成,共有 NN 座车站,每座车站都会有线路停靠。每条线路的相邻两站之间可视为由无向边连接。其中地铁 ii 号线上有 kik_i 座车站,这些车站互不相同。

这些线路会在一些车站相交,也就是说,一座车站可能有很多线路停靠。

现在,有 PP 位乘客分别想从 sjs_j 号车站出发,去 tjt_j 号车站,保证这两座车站不同。当这两座车站不在一条线路上时,他就会进行若干次换乘。作为天穹地铁的技术工作人员,你需要计算这些乘客贡献的客流量。


请注意,在这里使用的客流量计算方法和实际应用中的有所不同。

客流量 == 进站客流 ++ 换乘客流。进站客流即为乘客数;换乘客流为乘客的换乘次数。起终点之间可能会有多条路径可以选择,此时,地铁客流量与 乘客选择的 路径无关;计算时,我们只考虑 换乘次数最少 的路径。


注意:

  • 设从 ss 到 tt 最少进行 trans\rm trans 次换乘,则此时要乘坐 trans+1\rm trans + 1 条线路,贡献 trans+1\rm trans + 1 的客流量。
  • 当乘客不能从起点到达终点时,即 s,ts, t 之间没有通路,他就会去坐公交,此时客流量计为 00。

输入格式

第一行三个整数 N,M,PN, M, P。

接下来 MM 行,每行表示一条地铁线路:
每行第一个整数为 ki (2≤ki≤N)k_i\ (2 \le k_i \le N),为这条线的车站数;
后面 kik_i 个整数 q (1≤q≤N)q\ (1 \le q \le N),为这条线路依次经过的车站编号。

接下来 PP 行,每行两个整数 sj,tj (1≤sj,tj≤N; sj≠tj)s_j, t_j\ (1 \le s_j, t_j \le N;\ s_j \neq t_j),表示一位乘客的出行起终点。

输出格式

仅一行一个整数,表示这些乘客贡献的客流量。

8 4 4
4 1 2 3 5
2 3 6
2 2 4
3 7 4 8
1 6
4 3
4 8
6 7
9
8 4 4
4 1 2 3 5
3 6 3 8
2 2 4
3 7 4 8
1 6
4 3
4 8
6 7
7
8 3 4
4 1 2 3 5
2 3 6
3 7 4 8
1 6
4 3
4 8
6 7
3

提示

样例解释:

  • 默认乘客会选择换乘次数最少的路径。
  • 边上的数字表示所在地铁线路的编号。

样例 1 如图:

乘客 11 会乘坐 11 号线从 11 到 33,再乘坐 22 号线从 33 到 66;
乘客 22 会乘坐 33 号线从 44 到 22,再乘坐 11 号线从 22 到 33;
乘客 33 会乘坐 44 号线从 44 到 88;
乘客 44 会乘坐 22 号线从 66 到 33,乘坐 11 号线从 33 到 22,再乘坐 33 号线从 22 到 44,最后乘坐 44 号线从 44 到 77。

如上,四个人分别贡献了 2,2,1,42, 2, 1, 4 的客流量,答案为 99。

样例 2 如图:

相比样例 1,
乘客 22 可以选择另外一条路线,即乘坐 44 号线从 44 到 88,再乘坐 22 号线从 88 到 33,也是换乘一次的;
乘客 44 可以选择另外一条换乘次数更少的的路线:乘坐 44 号线从 77 到 88,再乘坐 22 号线从 88 到 66,只换乘了一次。

总客流量为 2+2+1+2=72 + 2 + 1 + 2 = 7。

样例 3 如图:

相比样例 1,乘客 22 和 44 的出行路径不是通路,不会计入客流量。

总客流量为 2+0+1+0=32 + 0 + 1 + 0 = 3。


设车站 ii 停靠的线路数为 sizi\mathrm{siz}_i。
对于所有数据:

  • 2≤N≤1052 \le N \le 10^5;
  • 1≤M≤10001 \le M \le 1000;
  • 1≤P≤1001 \le P \le 100;
  • 1≤sizi≤501 \le \mathrm{siz}_i \le 50。

本题采用捆绑测试。

No. Constraints Score
11 N,P≤5; M≤3N, P \le 5;\ M \le 3 1010
22 ki=2k_i = 2 2020
33 N,M≤50; P≤10N, M \le 50;\ P \le 10
44 M≤500; P≤10M \le 500;\ P \le 10
55 No further constraints 3030

由于读入量较大,请勿不关流同步使用 cin。

你可以通过 std::ios::sync_with_stdio(false) 来关闭 cin 的流同步。

你也可以使用以下快速读入模板,支持读入 int 范围内的非负整数。

int readInt() {
	int ret = 0; char o;
	while (!isdigit(o = getchar()));
	do ret = ret * 10 + (o ^ 48);
	while (isdigit(o = getchar()));
	return ret;
}

  • Idea: 南桥汽车站
  • Solution: 南桥汽车站
  • Code: 南桥汽车站
  • Data: 南桥汽车站