题意简述
给定一个无向图,保证包含一个汉密尔顿回路(给定这个回路,就不用您找了)。判断这个图是不是平面图(画在平面上没有边相交的图)。多组数据。
数据
输入:
2//两组数据
6 9
1 4
1 5
1 6
2 4
2 5
2 6
3 4
3 5
3 6
1 4 2 5 3 6//到此第一组
5 5
1 2
2 3
3 4
4 5
5 1
1 2 3 4 5//到此第二组
输出:
NO
YES
思路
首先根据玄学定理,m要<= 3 n − 6 3n-6 3n−6才能有解(如果不满足直接输出NO),这样m就和n在一个数量级了。
接着我们发现一个哈密尔顿回路珂以直接看成一个多边形,先把回路上的边标记掉,后面就不管了。对于一个其他的边,它珂以连在里面,也珂以连在外面。那个更优呢?
(爆搜)
如果有一个数据结构能够快速的维护边与边之间的香♂蕉&不香♂蕉 的关系,那什么都好办了。这是什么呢??
孔子云:种类并查集。(不知道的去自学。。。)
然后我们枚举边i和j,如果i和j在回路上一定是没问题的,不会相交。只有回路外的边是需要考虑的。我们用种类并查集维护,空间开 2 m 2m 2m, i + m i+m i+m和 i i i是对立关系,是一定要相交的。也就是说,如果 i i i和 i + m i+m i+m在同一个集合,就是矛盾的,也就不是平面图。
对于一对边,我们珂以通过其在回路上的位置判断是否相交(具体见下面的图和解释)。当然,如果并查集上显示它们在一个集合(即不会相交),那就矛盾了,直接输出 N O NO NO,返回。否则我们就记录一下 i , j i,j i,j的相交关系。(合并 i , j + m i,j+m i,j+m,合并