#CF455C. Civilization
Civilization
markdown C. 文明
每个测试点的时间限制: 秒
每个测试点的内存限制: MB
输入:标准输入(stdin)
输出:标准输出(stdout)
安德鲁在玩一个叫做“文明”的游戏,迪马在帮助他。
游戏中有 座城市和 条双向道路。城市编号从 到 。任意两座城市之间要么存在唯一的一条路径,要么不存在任何路径。路径是指一个由不同城市组成的序列 ,其中任意相邻的两座城市 和 ()之间都有一条道路。上述路径的长度等于 。我们规定,两座城市属于同一个区域当且仅当存在一条连接这两座城市的路径。
游戏过程中会发生两种类型的事件:
- 安德鲁询问迪马:城市 所在区域中最长路径的长度。
- 安德鲁要求迪马将城市 所在的区域与城市 所在的区域合并。如果这两座城市已经在同一个区域中,则无需合并。否则,需要按如下方式合并:从第一个区域中选择一座城市,从第二个区域中选择一座城市,在它们之间修建一条道路,使得合并后区域中最长路径的长度尽可能小。如果有多种方式可以达到该最小长度,可以选择任意一种。
迪马觉得处理安德鲁的询问很困难,因此请你帮助他。请帮助迪马。
输入
第一行包含三个整数 (;;),分别表示城市的数量、已有道路的数量以及询问的数量。
接下来的 行,每行包含两个整数 和 (;),表示城市 和 之间的一条道路。任意两座城市之间最多有一条道路。
接下来的 行,每行表示以下两种事件之一:
1 xi:安德鲁要求迪马找出城市 ()所在区域中最长路径的长度。2 xi yi:安德鲁要求迪马将城市 所在的区域与城市 ()所在的区域合并。注意, 可能与 相等。
输出
对于每个第一类事件,在一行中输出答案。
样例
输入示例:
6 0 6
2 1 2
2 3 4
2 5 6
2 3 2
2 5 3
1 1
输出示例:
4