#icpc2015summerday4h. [icpc2015summer_day4_h]Laser Cutter
[icpc2015summer_day4_h]Laser Cutter
问题描述
Ciel打算进行木工制作。Ciel想要使用激光切割机在一块木板上做一个切口。
为了简单起见,我们假设木板是一个二维平面。木板上有几个分段,Ciel想要沿着这些分段切割木板。每个分段都有一个方向,Ciel必须沿着它们的方向切割这些分段。当你忽略方向时,这些分段是相连的,也就是说,分段上的任意两点通过这些分段直接或间接地相连。
当激光切割机处于开启状态时,它会发射一束激光,击中木板的某个点并沿着其轨迹切割木板。激光最初指向。Ciel可以进行以下两种操作:
- 将激光切割机带电移动并沿着其方向切割(一部分)分段,或者
- 将激光切割机带电移到任意位置。Ciel不一定需要一次性切割整个分段;她可以在分段的任意点上开始或停止切割分段。
Ciel喜欢高效,因此她想知道最短路径,使得激光切割机切割所有分段的整个部分,然后返回到初始点。您的任务是编写一个程序,计算激光切割机的最小总移动距离。
输入
输入的第一行包含一个整数(),表示分段的数量。接下来一行包含两个整数和(),表示激光的初始位置。接下来的行中的第行包含四个整数,,和(),表示它们是第个分段的端点,并且激光切割机可以沿着方向由指向来切割木板。输入满足以下条件:对于所有的(),。初始点位于至少一个给定分段上。对于所有不同的(),第个分段和第个分段至多共享一个点。
输出
输出一行,包含激光切割机需要移动的最小总距离,以便切割所有分段并返回到初始点。绝对误差或相对误差应小于。
示例输入1
3
0 1
0 0 0 1
0 1 0 2
0 2 0 3```
### 示例输出1
```plain
6.0000000000000000```
---
### 示例输入2
```plain
2
0 1
0 0 0 2
-1 1 1 1```
### 示例输出2
```plain
6.8284271247461900```
---
### 示例输入3
```plain
5
0 0
0 0 1 0
1 1 -1 1
-1 1 -1 -1
-1 -1 1 -1
1 -1 1 1```
### 示例输出3
```plain
10.0000000000000000```