#CF455C. Civilization

    ID: 6727 传统题 1000ms 256MiB 尝试: 5 已通过: 1 难度: 10 上传者: 标签>动态规划DFS及其变种dsuternary search*2100

Civilization

markdown C. 文明

每个测试点的时间限制:11
每个测试点的内存限制:256256 MB
输入:标准输入(stdin)
输出:标准输出(stdout)

安德鲁在玩一个叫做“文明”的游戏,迪马在帮助他。

游戏中有 nn 座城市和 mm 条双向道路。城市编号从 11nn。任意两座城市之间要么存在唯一的一条路径,要么不存在任何路径。路径是指一个由不同城市组成的序列 v1,v2,,vkv_1, v_2, \dots, v_k,其中任意相邻的两座城市 viv_ivi+1v_{i+1}1i<k1 \le i < k)之间都有一条道路。上述路径的长度等于 (k1)(k-1)。我们规定,两座城市属于同一个区域当且仅当存在一条连接这两座城市的路径。

游戏过程中会发生两种类型的事件:

  • 安德鲁询问迪马:城市 xx 所在区域中最长路径的长度。
  • 安德鲁要求迪马将城市 xx 所在的区域与城市 yy 所在的区域合并。如果这两座城市已经在同一个区域中,则无需合并。否则,需要按如下方式合并:从第一个区域中选择一座城市,从第二个区域中选择一座城市,在它们之间修建一条道路,使得合并后区域中最长路径的长度尽可能小。如果有多种方式可以达到该最小长度,可以选择任意一种。

迪马觉得处理安德鲁的询问很困难,因此请你帮助他。请帮助迪马。

输入

第一行包含三个整数 n,m,qn, m, q1n31051 \le n \le 3 \cdot 10^50m<n0 \le m < n1q31051 \le q \le 3 \cdot 10^5),分别表示城市的数量、已有道路的数量以及询问的数量。

接下来的 mm 行,每行包含两个整数 aia_ibib_iaibia_i \neq b_i1ai,bin1 \le a_i, b_i \le n),表示城市 aia_ibib_i 之间的一条道路。任意两座城市之间最多有一条道路。

接下来的 qq 行,每行表示以下两种事件之一:

  • 1 xi:安德鲁要求迪马找出城市 xix_i1xin1 \le x_i \le n)所在区域中最长路径的长度。
  • 2 xi yi:安德鲁要求迪马将城市 xix_i 所在的区域与城市 yiy_i1xi,yin1 \le x_i, y_i \le n)所在的区域合并。注意,xix_i 可能与 yiy_i 相等。

输出

对于每个第一类事件,在一行中输出答案。

样例

输入示例:

6 0 6
2 1 2
2 3 4
2 5 6
2 3 2
2 5 3
1 1

输出示例:

4