题目描述很简单:
把一些元素划分到两个集合,其中某些元素不能再一个集合,问是否可行。
数据组数<=100,N<=200,M<=10000;
关于集合划分的判定性问题,很容易联想到2-sat构图。
总之思想十分简单,把每个点拆分成两个点 a 和 b ,意义是这个元素在A集合或B集合。
对与两两不可以处于同一个集合的点 i 和 j ,连接ai-bj,aj-bi(无向),存在点p,ap可以到bp,那么就是矛盾的,可以理解为p如果在A集合,那么p在B集合。
以边为点,那么将会有M2条边,思维就在这里卡住了。
后来仔细分析了一下,发现其实在一个n个点的哈密顿回路内部,最多有n-3条边,因此,这样的n个点的图如果有超过3N-6的边,那么一定不是平面图。所以,只有在m<=3n-6的时候才需要进行判定。
最后算法复杂度为O(N2T);
贴代码: