#P16666. [Ctu2023]Hamster
[Ctu2023]Hamster
题目描述
仓鼠 Joe 是 Tomorrow Programming School 深受喜爱的宠物之一。
生物系把为 Joe 设计和建造活动围栏的任务交给了学校的“搭载强力人工智能的中央机器人”CRESAI。
围栏将建在生物系新划定的一块动物活动区域中。该区域是一个水平平面,由边长为 的正方形地砖铺成。相邻地砖之间的缝隙构成一个矩形网格。
围栏由若干长度为 的墙段组成。每一段墙都安装在两块相邻地砖之间的缝隙上,并且墙段的两个端点都位于地砖的角点处。
如果两块相邻地砖之间没有墙段,Joe 就可以从当前地砖移动到另一块地砖。Joe 不能跳过或钻过墙段,也不能从两段相邻墙之间挤过去,更不能撞毁墙段。
因此,当墙段被恰当地放置时,它们可以形成一个封闭区域,使 Joe 无法逃到外面。
然而,CRESAI 并没有很好地完成任务。虽然它安装的每一段墙都位于合法的网格缝隙上,且两个端点均为格点,但大部分墙段似乎是随机放置的,不能保证已经形成任何封闭区域。
为了暂时解决这个问题,生物学家希望再安装尽可能少的单位墙段。新墙段可以安装在任意尚未使用的合法网格缝隙上。
添加墙段后,只要能够形成一个任意形状、任意大小的封闭区域即可。CRESAI 原先安装的部分墙段可以不参与这个封闭区域。
请计算最少还需要添加多少段墙,才能形成一个 Joe 无法逃出的封闭区域。
输入格式
第一行包含一个整数 :
表示 CRESAI 已经安装的墙段数量。
接下来 行,每行描述一段墙,包含四个整数:
其中 和 是该墙段两个端点的坐标。
坐标轴与网格缝隙平行,所有网格交点的坐标均为整数。所有输入墙段均满足:
以及
也就是说,每一段墙都是连接两个相邻整数点的单位水平线段或单位竖直线段。
输出格式
输出一个整数,表示为了形成至少一个任意大小、任意形状的封闭区域,最少还需要添加的墙段数量。
样例
输入
9
0 0 0 1
0 1 1 1
1 1 1 2
1 2 0 2
0 2 -1 2
-1 2 -2 2
-2 2 -2 1
-2 1 -2 0
-2 0 -1 0
输出
1
样例示意图

样例墙段示意图