1. #include<cstdio>
  2. #include<vector>
  3. #include<cstring>
  4. using namespace std;
  5.  
  6. const int maxn = _____;
  7.  
  8. struct TwoSAT
  9. {
  10. int n;
  11. vector<int> G[maxn*];
  12. bool mark[maxn*];
  13. int S[maxn*], c;
  14.  
  15. bool dfs(int x)
  16. {
  17. if (mark[x^]) return false;
  18. if (mark[x]) return true;
  19. mark[x] = true;
  20. S[c++] = x;
  21. for (int i = ; i < G[x].size(); i++)
  22. if (!dfs(G[x][i])) return false;
  23. return true;
  24. }
  25.  
  26. void init(int n) // 一定要注意初始化的点数,别弄错
  27. {
  28. this->n = n;
  29. for (int i = ; i < n*; i++) G[i].clear();
  30. memset(mark, , sizeof(mark));
  31. }
  32.  
  33. // x = xval or y = yval
  34. void add_clause(int x, int xval, int y, int yval) // 编号从0~n-1
  35. {
  36. x = x * + xval;
  37. y = y * + yval;
  38. G[x^].push_back(y);
  39. G[y^].push_back(x);
  40. }
  41.  
  42. bool solve()
  43. {
  44. for(int i = ; i < n*; i += )
  45. if(!mark[i] && !mark[i+])
  46. {
  47. c = ;
  48. if(!dfs(i))
  49. {
  50. while(c > ) mark[S[--c]] = false;
  51. if(!dfs(i+)) return false;
  52. }
  53. }
  54. return true;
  55. }
  56. };
  57.  
  58. TwoSAT solver;
  59. ////////////////////////////////////////////////////
  60. //二分搜索,2-SAT中经常会用到
  61. int L=____,R=____;
  62. while(L < R)
  63. {
  64. int M = L + (R-L+)/;
  65. if(test(M)) L = M; // M满足条件的话test返回真
  66. else R = M-;
  67. }
  68. printf("%d\n",L);

图论:2-SAT模板的更多相关文章

  1. 图论算法-Tarjan模板 【缩点;割顶;双连通分量】

    图论算法-Tarjan模板 [缩点:割顶:双连通分量] 为小伙伴们总结的Tarjan三大算法 Tarjan缩点(求强连通分量) int n; int low[100010],dfn[100010]; ...

  2. 2 - sat 模板(自用)

    2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一  POJ 3207 Ikki's Story IV ...

  3. ACM - 图论- 网络流 - 算法模板

    \(EK\) 算法模板 #include <iostream> #include <queue> #include<string.h> using namespac ...

  4. 图论--割边--Tarjan模板

    #include<iostream> #include<stdio.h> #include<vector> using namespace std; const i ...

  5. 图论--割点--Tarjan模板

    #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> ...

  6. 图论--最小生成树--Kruscal 模板

    #include<iostream> #include<queue> #include<algorithm> #include<set> #includ ...

  7. ACM模板合集

    写在前面: 第一年小白拿铜牌,第二年队友出走,加上疫情原因不能回校训练导致心底防线彻底崩盘,于是选择退役. 自从退役之后,一直想我打了那么久的ACM,什么也没留下觉得很难受,突然想到我打ACM的时候, ...

  8. poj1236Network of Schools Tarjan裸题

    其实就是手打了个Tarjan的模板 输出的时候注意是入度为0的点的个数和max(入度0的个数,出度0的个数),在n=1时特判为0即可 ——以后图论要渐渐模板化,方便使用 #include <cs ...

  9. 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

    洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...

随机推荐

  1. 转载——Struts2中的constant详解

    http://bhw1015.iteye.com/blog/1258441 通过对这些属性的配置,可以改变Struts 2 框架的一些默认行为,这些配置可以在struts.xml文件中完成,也可以在s ...

  2. zookeeper[1] (转)ZooKeeper Programmer's Guide(zookeeper编程向导)---中文

    原文:http://www.cnblogs.com/Xrinehart/p/3512509.html 本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实 ...

  3. socket实例2

    第二个实例创建一个java工程,基于tomcat服务器,程序运行时会启动客户端,实现了一个客户端向其他的客户端发送即时信息的功能 MainWindow.java package com.jikexue ...

  4. Java 泛型数组

    Java 不支持泛型数组.也就是说, List<String>[] ls = new ArrayList<String>[10]; 是不支持的,而 List<String ...

  5. gcc -L -l的使用

    -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so ...

  6. passwd-shadow文件

    [root@rusky /]# vi /etc/passwd root:x:::Redhat5:/root:/bin/bash rusky:x::::/home/rusky:/bin/bash 1.r ...

  7. Gradle的简介、安装与配置

    Gradle介绍 Gradle是一个基于JVM的构建工具,它提供了: 像Ant一样,通用灵活的构建工具,对Ant的任务做了很好的集成 同Maven一样是基于约定的构建框架 强大的多工程构建支持.有广泛 ...

  8. eclipse打包 jar文件,中文乱码解决方案

    直接通过eclipse浏览源代码时,发现中文注释为乱码的问题.其实这个eclipse默认编码造成的问题.可以通过以下方法解决: 修改Eclipse中文本文件的默认编码:windows->Pref ...

  9. Tree( 树) 组件[2]

    本节课重点了解 EasyUI 中 Tree(树)组件的使用方法, 这个组件依赖于 Draggable(拖动)和 Droppable(放置)组件.一. 异步加载如果想从数据库里获取导航内容, 那么就必须 ...

  10. (转)根据IP返回对应的位置信息

    其实就是使用了百度的IP库的功能接口,然后处理下就行了,效果图如下: 准备工作: 1.注册成为开度开发者,创建应用获得百度API调用的AK秘钥,百度开发中心地址:http://developer.ba ...