Skip to content

P10004

P1004 距离与子图

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\),表示查询上述题意中边数最小的子图边数大小。

本题共有 \(13\) 个测试点,前 \(8\) 测试点每个测试点 \(10\) 分,后 \(5\) 个测试点绑定测试,全部通过可以获得 \(20\) 分。

对于测试点 \(1\),满足 \(q=1\)

对于测试点 \(1,2,3,4,5\),满足 \(op=1\)

对于测试点 \(6,7,8\),满足 \(n\le 400\).

对于全部测试点,保证 \(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