JOI 先生在 IOI 国拥有一块很大的土地。IOI 国由一个坐标平面表示,X 轴和 Y 轴相互垂直。坐标为 $(x, y)$ 的点表示 X 坐标为 $x$、Y 坐标为 $y$ 的点。他的土地是 X 坐标和 Y 坐标均在 $-10^{100}$ 到 $10^{100}$(含边界)之间的区域。他在牧场中饲养奶牛,牧场是 X 坐标和 Y 坐标均在 $-S$ 到 $S$(含边界)之间的区域。
JOI 先生决定用一些栅栏围住牧场以圈养奶牛。栅栏由长度为正实数的线段表示。他将以这样一种方式围住牧场:即从牧场内部的任何一点出发,如果不经过任何存在栅栏的点(包括栅栏的端点),就无法到达他土地的外部。土地中已经存在一些栅栏,他可以利用这些栅栏来围住牧场。对于这些栅栏中的任意两条,如果它们有公共点,则该点至少是其中一条栅栏的端点。
JOI 先生可以建造任意数量的新栅栏。新栅栏可以是任意长度和任意方向,只要它既不穿过牧场内部,也不超出他的土地范围即可。他可以建造沿着牧场边界的栅栏。建造长度为 $l$ ($l > 0$) 的新栅栏成本为 $l$。两条栅栏可能会相交,一个栅栏的端点可能与另一个栅栏的端点重合,或者一个栅栏的端点可能位于另一个栅栏上。
JOI 先生希望以尽可能低的成本围住牧场。
题目描述
给定牧场的大小和已建栅栏的数据,编写一个程序计算围住牧场所需的最小总成本。
输入格式
从标准输入读取以下数据。
- 第一行包含两个空格分隔的整数 $N$ 和 $S$。这意味着牧场是 X 坐标和 Y 坐标均在 $-S$ 到 $S$(含边界)之间的区域,且 JOI 先生的土地上已经有 $N$ 个栅栏。
- 接下来的 $N$ 行中的第 $i$ 行($1 \le i \le N$)包含四个空格分隔的整数 $A_i, B_i, C_i$ 和 $D_i$。这意味着第 $i$ 个已建栅栏是连接点 $(A_i, B_i)$ 和 $(C_i, D_i)$ 的线段。
输出格式
输出一行到标准输出。输出应包含围住牧场所需的最小总成本。你可以输出小数点后的任意位数,但你的输出与正确答案之间的绝对误差必须不超过 $0.01$。
数据范围
所有输入数据满足以下条件:
- $1 \le N \le 100$
- $1 \le S \le 200$
- $-200 \le A_i \le 200$ ($1 \le i \le N$)
- $-200 \le B_i \le 200$ ($1 \le i \le N$)
- $-200 \le C_i \le 200$ ($1 \le i \le N$)
- $-200 \le D_i \le 200$ ($1 \le i \le N$)
- $(A_i, B_i) \neq (C_i, D_i)$ ($1 \le i \le N$)
- 输入中的栅栏均不穿过牧场内部。
- 对于输入中任意两条不同的栅栏,如果它们有公共点,则该点至少是其中一条栅栏的端点。
子任务
共有 3 个子任务。各子任务的分数和附加限制如下:
子任务 1 [18 分]
- $N = 1$
子任务 2 [33 分]
- $N \le 6$
子任务 3 [49 分]
- 无附加限制。
样例
样例输入 1
3 4 -3 5 1 8 -4 3 -4 6 5 1 7 2
样例输出 1
29.0000000000
样例输入 2
1 2 -3 -3 -3 -2
样例输出 2
16.0000000000
说明 2
注意,完全不使用已建栅栏也是可以的。
样例输入 3
4 3 4 -1 3 4 -4 2 -2 4 -4 0 -5 6 0 -6 5 -2
样例输出 3
14.1392801789
样例输入 4
10 80 175 95 60 -146 -106 57 18 185 190 -68 177 -142 84 -195 127 -179 34 143 126 69 -92 133 -190 80 -157 -66 -119 -161 -85 -124 129 -171 141 181 175 175 107 -38 150 148
样例输出 4
238.4778364511