终于把题基本补完了,头大,,,
发现几个以前理解的不对的地方,比如2-SAT tarjan解法反向拓扑求可行解的过程,再有之前 关于2-SAT中如果p->q和非q->非p一定同时存在的时候可以用扩展域并查集代替tarjan在线判断合法性的理解现在看来是不全面的。 (写到后面发现并查集有个地方写错了,改后就A了,有点戏剧,不过目前来看之前的思考还是很有道理的,有没有用再说吧)。
直接举例子吧
题意:(POJ 3702)
一个圆上n个点,m条线段,一条线段连接两个点,线段不能跨越圆的边界(只能在圆的内侧或者外侧),问这m条线段能不能同时存在。
分析:
直接往差分约束上想的话这题就很水了,注意一下的就是如果两条线段在同一侧相交的话,不论线段跨越优弧还是劣弧都是会相交的,分类讨论一下即可。
这里用扩展域并查集解为什么不合适呢。 可以A呢?
思路:
还是o(n*n)枚举边,总共C(m,2)种情况,如果这两条边相交,外合并内,内合并外,如果不相交就不用管了。然后每次出现两边相交的情况,先判断其是不是一定在同一侧,如果在同一侧,直接break,否则,继续。
开始没想明白的是 这样能是(最终如果认为有解)的充要条件么。答案是肯定的。