P5452 [THUPC 2018] 琪亚娜之墙
题目描述
那一天,人类终于回想起,曾经一度被她们支配的恐惧,还有被囚禁于鸟笼中的那份耻辱。
为了守护最珍视之物,Kiana建立起了 $n$ 座围墙,每一座围墙都闭合形成了一个**凸多边形**,不同的围墙**互不相交**。出于特别的目的,围墙分为两种:用砖瓦和岩石砌成的**工匠之墙**、用树木和荆棘形成的**自然之墙**。
只依靠墙壁并不使人放心,Kiana还派遣了两类士兵在墙内巡逻:
**追魂猎人**:他们从小与大自然为伴,可以自由穿越自然之墙,但无法通过工匠之墙。
**天马骑士**:他们拥有在天空中飞行的能力,可以自由飞越工匠之墙,但由于某些信仰的缘故,无法通过自然之墙。
只依靠墙壁和士兵任然难以让人放心,但Kiana还拥有神之力量,在某段时间内,她发挥了 $m$ 次这股力量,以完成两类事件:
1. 将某座工匠之墙转化为自然之墙,或将某座自然之墙转化为工匠之墙。
2. 将一位追魂猎人或天马骑士直接传送到坐标 $(x,y)$ 处,保证这个坐标不位于围墙之上,且与最近的围墙相距至少 $10^{-3}$。
在每一次传送士兵完成后,Kiana希望知道这名士兵可以自由活动的区域**面积**有多大。由于她不会做,所以希望你来告诉她答案。
输入格式
输入第一行包含两个正整数 $n$ 和 $m$,分别表示围墙的数量和Kiana发动神之力量的次数,数据保证 $n\leq 3\times 10^4$且 $m\leq 10^5$。
接下来 $n$ 行,第 $i$ 行用于描述第 $i$ 座围墙的情况,首先有两个正整数 $k_i$ 和 $r_i$,分别表示这座围墙的顶点数和类型,若 $r_i=1$ 表示这是工匠之墙,若 $r_i=2$ 表示这是自然之墙,接下来 $2k_i$ 个实数,第 $2p-1$ 和第 $2p$ 个数表示这座围墙上第 $p$ 个顶点的横、纵坐标,所有的顶点按照在多边形上逆时针排列的顺序输入,数据保证 $3\leq k_i\leq 100$ 且 $\sum_{i=1}^{n}k_i\leq 10^5$。
接下来 $m$ 行,第 $j$ 行用于描述Kiana第 $j$ 次使用神之力量的情况,首先有一个正整数 $op$,表示Kiana发动的神之力量类型,若:
$op=1$:这一行还有一个正整数 $u$,表示Kiana转换了第 $u$ 座围墙的类型(若本来为工匠之墙,则转化为自然之墙,若本来为自然之墙,则转化为工匠之墙),数据保证 $1\leq u\leq n$。
$op=2$:这一行还有一个正整数 $v$ 与两个实数 $x$ 和 $y$,若 $v=1$,表示Kiana将一名追魂猎人传送到了 $(x,y)$ 处,若 $v=2$,表示Kiana将一名天马骑士传送到了 $(x,y)$ 处。
数据保证所有的 $r_i$、$op$ 和 $v$ 的取值仅为 $1$ 或 $2$,所有的实数保留到小数点后两位且绝对值小于 $2\times 10^5$,任意两个的多边形之间的距离至少为 $10^{-3}$,任意两个输入顶点的横坐标之差与纵坐标之差的绝对值不小于 $10^{-3}$。
输出格式
输出由若干行组成,对于每个 $op=2$ 的输入,输出一行一个实数 $S$(保留到小数点后 $4$ 位),表示该名士兵可以自由活动的区域面积,数据保证这个面积是有限的。
说明/提示
来自 2018 清华大学学生程序设计竞赛暨高校邀请赛(THUPC2018),感谢 [Pony.ai](http://pony.ai/) 对此次比赛的支持。
题解等资源可在 查看。