Description
C 城又要举办一系列的赛车比赛,在比赛前,需要在城内修建一些赛道。
C 城共有 n 个路口,这些路口编号为 1,2,⋯,n,有 n−1 条适合于修建赛道的双向通行的道路,每条道路连接着两个路口。其中,第 i 条道路连接的两个路口编号为 ui 和 vi。借助这 n−1 条道路,从任何一个路口出发都能到达其他所有的路口。
现在 C 城有 m 条备选的修建方案,第 i 条方案 (xi,yi) 表示修建一条从 xi 号路口出发,到 yi 号路口结束的赛道。C 城想要从这 m 条赛道中选择若干条进行修建,为了比赛的安全进行,选出的这些赛道需要满足任意两条赛道不会经过同一个路口(包括赛道的端点)。正当 C 城准备修建赛道之时,C 城不幸出现了疫情!为了控制疫情传播,C 城决定选择封锁一条路径 (a,b),但 C 城不希望影响比赛的进行。
具体地,设封锁前最多能够从 m 条赛道中选出 k 条进行修建,那么封锁一条路径 (a,b) 是合法的,当且仅当封锁后还能够选出 k 条赛道,满足这 k 条赛道中的任意两条赛道不会经过同一个路口,并且这 k 条赛道中的任意一条都不经过路径 (a,b) 中的路口。
作为 C 城有名的设计师,你的任务是求出有多少个不同的有序对 (a,b),满足封锁路径 (a,b) 合法。
第一行两个正整数 n,m,分别表示路口数以及备选赛道数。
接下来 n−1 行,每行两个正整数 ui,vi 表示第 i 道路连接的两个路口的编号。
接下来 m 行,每行两个正整数 xi,yi 描述一条备选赛道。
Output
输出一行一个整数表示合法的路径 (a,b) 的条数。
Samples
8 6
1 2
1 3
1 4
1 5
5 6
5 7
7 8
2 3
2 4
3 4
1 6
5 6
5 8
8
见附件中的 race/race2.in。
见附件中的 race/race2.ans。
Limitation
【样例解释 #1】
封锁前最多可以选出 2 条赛道,例如 (2,3) 和 (5,8)。
封锁以下路径是合法的:
- 封锁 (2,2),可以选择 2 条赛道 (3,4)、(5,8)。
- 封锁 (3,3),可以选择 2 条赛道 (2,4)、(5,8)。
- 封锁 (4,4),可以选择 2 条赛道 (2,3)、(5,8)。
- 封锁 (6,6),可以选择 2 条赛道 (2,3)、(5,8)。
- 封锁 (7,7),可以选择 2 条赛道 (2,3)、(5,6)。
- 封锁 (7,8),可以选择 2 条赛道 (2,3)、(5,6)。
- 封锁 (8,7),可以选择 2 条赛道 (2,3)、(5,6)。
- 封锁 (8,8),可以选择 2 条赛道 (2,3)、(5,6)。
因此共有 8 条合法的路径。
【数据范围】
对于全部数据,保证 2≤n≤3×105,1≤m≤3×105,1≤ui,vi,xi,yi≤n。
测试点编号 |
n,m≤ |
数据类型 |
1,2 |
10 |
C2 |
3,4 |
20 |
5,6 |
30 |
7,8 |
100 |
9,10 |
300 |
11 |
500 |
12,13 |
1000 |
14,15 |
3000 |
16 |
105 |
A1 |
17,18 |
A2 |
19,20 |
B2 |
21 |
C1 |
22,23,24 |
C2 |
25 |
3×105 |
数据类型的含义:
A:保证 vi=ui+1。
B:保证 ui=1。
C:在树的形态上无特殊约束。
1:保证 xi=yi。
2:给出的备选赛道无特殊约束。