Skip to content

P10005

P1005 距离与子图【数据加强版】

Note

欢迎同学们踊跃添加 hack 数据,本题正确的时间复杂度应为 \(O(nm)\).

理论上本题暂时未能卡掉全部不正确的做法。

也欢迎同学们测试自己通过普通版题目的代码是否正确。

普通版题目不会再进行增强数据与重测。

Description

给出一个 \(n\) 个点,\(m\) 条边的无向简单连通图,你需要回答以下两种询问。

  1. 给出顶点 \(u,v\),查询 \(u,v\) 的距离(它们最短路的边数)。
  2. 给出顶点 \(a,b,c\),你需要找到原图的一个边数最少的子图,满足子图中 \(a,b\) 的距离、 \(b,c\) 的距离和 \(a,c\) 的距离相较于原图不发生改变。

Format

Input

第一行输入三个正整数 \(n,m,q\)

接下来 \(m\) 行每行输入两个正整数 \(x,y\) 表示 \(x\)\(y\) 有一条边。

接下来 \(q\) 行,每行每行第一个整数 \(op\) 表示操作类型,若:

  • \(op=1\),接下来输入两个正整数 \(u,v\),表示查询这两个顶点之间的距离。
  • \(op=2\),接下来输入三个正整数 \(a,b,c\),表示查询上述题意中边数最小的子图边数大小。

对于全部测试点,保证 \(n\le 5000,m\le 5000,q\le 5000,1\le u,v,a,b,c\le n,op\in\{1,2\}\),保证 \(op=2\) 的询问不超过 \(5\) 次。

保证所有操作满足题目描述,保证每一行的两个相邻整数都仅用一个空格隔开。

Output

对于每个询问,输出单独一行表示结果。

Samples

Sample Input 1

16 18 8
1 2
1 3
1 8
2 11
2 4
3 5
3 6
4 5
4 15
5 10
6 7
6 9
6 14
8 9
10 15
10 16
11 12
11 13
1 1 6
1 7 15
1 12 14
1 4 8
2 1 2 3
2 9 11 16
2 6 12 13
2 7 8 15

Sample Output 1

2
5
6
3
2
11
6
10