2 - SAT算法

2 - SAT 大概是要满足以下关系:

  现在有一个集合,你现在要把这个集合里面的所有元素都分成两个集合,给定许多个诸如此类限制条件:

  1.x0与y0必须在同一集合内

  2.x1与y1必须在同一集合内

  3.x2与y2必须在同一集合内

  .....

  现在要你判断是否能将原有的那个集合分成两个集合

思路 :

  1.首先用tarjan缩点,处于同一个强连通分量里面的元素则必须都放置在同一个集合内

    2.用缩点后的点来建一个反图

   3.寻找对立点,对于上面限制条件中,如果x,y属于不同的强连通分量中,那这两个强连通分量就是对立点

    4.拓扑排序。每次找到一个点,如果它上面没有打标记,打上选择标记,并把其对立点,打上不选标记

  如果成功就是可行的.

posted @ 2020-09-29 20:00  MYCui  阅读(312)  评论(0编辑  收藏  举报