题目链接:http://codeforces.com/problemset/problem/934/E
题目大意:给定平面内n个圆,问这些圆把平面分成了多少个区域。
这题是欧拉定理,但和欧拉定理一般式(V+F-E=2)不太一样..
求圆拆分平面有多少个区域怎么能离得开平面图的欧拉公式呢?
一般平面图欧拉公式:f=e−v+c+1
其中 e 代表边的数量,v 代表点的数量,c 代表连通块的数量,f 代表平面区域的个数
我们把圆弧看作边,交点看作顶点,于是很容易便可以算出 e,v,c 啦~
对于 e ,它相当于每个圆上交点的数量和(因为这些交点把圆拆分成了这么多的弧)
对于 v ,枚举求出交点去重即可
对于 c ,我们已经有了无向图的边,那连通块的数量可以直接 dfs/bfs 或者并查集算出来啦~
然后套用公式就是结果了,注意精度问题。
引用自https://blog.csdn.net/qq_28954601/article/details/79329961
注意圆的欧拉公式中各值的定义也不太一样,E是不会算上单独的圆边的。具体确定方法见上面引用。
1 |
|