#P2678. Mothy

Mothy

描述

Mothy 是一种小飞蛾。Mothy 和他的母亲穿着一条非常旧的牛仔裤。因为牛仔裤很旧,所以上面布满了补丁。有时,补丁会相互重叠。每个补丁都是一个凸多边形,由一些不同于棉花的材料制成。Mothy 想以最快的方式去找他的母亲。他不吃东西就不能动,而且由于他的年龄,他除了牛仔裤和棉线之外什么都不能吃。尽管 Mothy 年纪大了,但他非常聪明,他可以按照精确的坐标移动,但他无法计算它们。编写一个程序来计算从 Mothy 的位置到他母亲的位置的最小路径的长度。Mothy 必须能够通过这条路。考虑到这条旧牛仔裤被放置在平面上并且足够大。Mothy 只能在牛仔裤的表面移动,因为他不够大,无法穿透牛仔裤。

因为 Mothy 太小了,他应该被视为一个点。Mothy 还可以在任何补丁的边缘移动,因为它们是用棉线缝制的。Mothy 可以在公共边上移动,但不能位于任何面片的顶部。


输入

输入的第一行包含一个整数 TT,指示测试用例的数量。每个测试用例都以数字 NN 个补丁和四个整数开头 – Mothy 位置的坐标 (X,Y)(X, Y) 以及他母亲位置的坐标 (U,V)(U, V),由空格分隔(10000X,Y,U,V10000-10000 \leq X, Y, U, V \leq 10000)。每个图块都在一条单独的行上描述,从顶点数开始,后跟图块的每个顶点的一对整数坐标(10000xi,yi10000-10000 \leq x_i, y_i \leq 10000),用空格分隔。多边形的顶点总数不会超过 300300


输出

对于每个测试用例,程序必须在单独的行上输出 Mothy 和他母亲之间的最短路径的长度。结果应四舍五入到小数点后 33 位。如果 Mothy 无法联系到他的母亲,则程序必须输出 1-1


输入数据 1

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

输出数据 1

5.000
7.236

来源

2005 年东南欧