#P10304. [THUWC 2020] 道路修建

[THUWC 2020] 道路修建

题目描述

AA 国是一个古老的国家。这个国家分布着 nn 个城市,城市由 1n1 \sim n 编号。其中,11 号城市是这个国家的首都,也是国家里唯一有港口的城市。进口的货物从首都的港口运入,再运送向其它城市。

为了方便进口货物的运送,AA 国国王打算修建若干条单向道路专门用于运送货物。很快,AA 国的大臣们给出了一个道路修建方案:这个方案由 mm 条单向道路组成,通过这些道路可以从 11 号城市到达国家内的其它任意一个城市。非常特殊的是,这 mm 条道路构成的道路网络不存在环。

由于财政状况不允许,AA 国国王打算从 mm 条道路中先选择 n1n-1 条进行修建,以保证基本的货物运输能力。他使用了一种类似于深度优先搜索的方法确定出优先修建的 n1n-1 条道路:

首先,令集合 SS 为仅包含 11 号城市的集合,并设置当前城市 uu11 号城市。

然后,选择一条以当前城市 uu 为出发点、一个不在集合 SS 内的城市 vv 为终点的道路,将该道路标记为优先修建的道路,将城市 vv 加入 SS 集合,并将城市 vv 的父亲设置为当前城市 uu

最后,将当前城市 uu 修改为城市 vv。如果城市 vv 的选择有多个,则选择城市编号最小的一个;如果没有可以选择的城市 vv,则将当前城市 uu 修改为 uu 的父亲。

重复上述操作,直到所有城市被加入 SS 集合时停止。

可以发现,上述步骤恰好可以选出被优先修建的 n1n - 1 条道路,并且这些优先修建的道路可以构成一个以首都为根的树型结构。我们称这些被优先修建的道路为树上道路。

随着经济的发展,AA 国逐渐完成了 mm 条道路构成的道路网。但其中,树上道路由于修建年代较早,时常需要进行维护。AA 国的大臣们提出了 qq 个可能的维护计划,每个修建计划需要同时维护城市 aa 与城市 bb 之间的所有树上道路,并且保证城市 aa 是城市 bb 在树上的祖先。这样的维护计划会对城市 bb 为根的子树产生很大的影响,AA 国国王希望你帮忙评估每个可能的维护计划——计算在城市 aa 与城市 bb 之间的所有树上道路不能使用时,从首都出发,有多少个在以城市 bb 为根的子树内的城市将不能到达?

输入格式

第一行三个整数 n,m,qn,m,q,分别表示 AA 国的城市数量、道路修建方案的道路数量、维护计划的数量。

接下来 mm 行,每行两个整数 x,yx, y,表示修建方案中一条从xxyy的单向道路。

接下来 qq 行,每行两个整数 a,ba,b,表示一个维护计划。

输入数据保证:

  1. 给定的道路修建方案保证从首都出发能到达 AA 国的每个城市,并且该方案中不存在环。
  2. 任意两个城市之间的道路至多出现一条,每条道路两端的城市编号不同。
  3. 每个维护计划中的城市 aa 保证是城市 bb 在树上道路构成的树结构中的某个祖先。

输出格式

输出 qq 行,每行一个整数,表示在每个维护计划下,从首都出发,有多少个在以城市 bb 为根的子树内的城市将不能到达。

3 3 2
1 2
2 3
1 3
1 2
1 3

1
0

提示

【子任务】

子任务编号 分值 特殊限制
11 2020 n,q1000n,q\leq 1000m1500m\leq 1500
22 2323 保证维护计划的城市 aa 是城市 bb 的父亲
33 1111 m=nm=n
44 1919 保证维护计划满足 a=1a=1
55 2727

对于 100%100\% 的数据,满足 1n,q1051\leq n,q \leq 10 ^ 51m1.5×1051\leq m \leq 1.5 \times 10 ^ 5