关键在于找出一定矛盾的条件,设一队的3个人为(a,b,c),a为队长,那么(a不留下,b不留下)矛盾,(a不留下,c不留下)矛盾; 对于每一对队员,(a留下,b留下)矛盾。

把模型建好,剩下的就是套模板了。


  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)
  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. ///////////////////////////////////////////////////////////////
  59. #include <iostream>
  60. #include <cmath>
  61. using namespace std;
  62. TwoSAT solver;
  63.  
  64. int main()
  65. {
  66. int t,m;
  67. while(~scanf("%d%d",&t,&m))
  68. {
  69. solver.init(t*);
  70. for(int i=;i<t;i++)
  71. {
  72. int a,b,c;
  73. scanf("%d%d%d",&a,&b,&c);
  74. solver.add_clause(a,,b,); // 0表示不留下,1表示留下
  75. solver.add_clause(a,,c,);
  76. //solver.add_clause(b,1,c,0);
  77. //solver.add_clause(c,1,b,0);
  78. }
  79.  
  80. for(int i=;i<m;i++)
  81. {
  82. int a,b;
  83. scanf("%d %d",&a,&b);
  84. solver.add_clause(a,,b,);
  85. }
  86. printf("%s\n",solver.solve()?"yes":"no");
  87. }
  88. return ;
  89. }

hdu1824-Let's go home:图论2-SAT的更多相关文章

  1. [leetcode] 题型整理之图论

    图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...

  2. 多边形碰撞 -- SAT方法

    检测凸多边形碰撞的一种简单的方法是SAT(Separating Axis Theorem),即分离轴定理. 原理:将多边形投影到一条向量上,看这两个多边形的投影是否重叠.如果不重叠,则认为这两个多边形 ...

  3. 并查集(图论) LA 3644 X-Plosives

    题目传送门 题意:训练指南P191 分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个 ...

  4. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  5. HDU 5521 [图论][最短路][建图灵感]

    /* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...

  6. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  7. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  8. HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. Codeforces 553C Love Triangles(图论)

    Solution: 比较好的图论的题. 要做这一题,首先要分析love关系和hate关系中,love关系具有传递性.更关键的一点,hate关系是不能成奇环的. 看到没有奇环很自然想到二分图的特性. 那 ...

  10. 图论(floyd算法):NOI2007 社交网络

    [NOI2007] 社交网络 ★★   输入文件:network1.in   输出文件:network1.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 在社交网络( ...

随机推荐

  1. iOS- UITableView could not hold the selected row after reload

    I like stackoverflow.. Answer : http://stackoverflow.com/questions/6649202/uitableview-doesnt-keep-r ...

  2. (转)iOS如何取得APP的版本信息跟服务器对比进行升级提示?

    关键是自动取版本信息: [NSString stringWithFormat:@"Version %@",[[NSBundle mainBundle] objectForInfoD ...

  3. Web安全测试之XSS(跨站脚本攻击)

    XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的 ...

  4. Hadoop在Windows环境下的部署[转]

    http://blog.csdn.net/ruby97/article/details/7423088 经过一整天的折腾,参考了网上很多资料,我机器上的Hadoop似乎是配置成功了.下面分享一下详细的 ...

  5. Java 之 StringTokenizer

    class StringTokenizer Object to: break a string into tokens. Contructs StringTokenizer(String str)   ...

  6. 服务 IntentService 前台服务 定时后台服务

    Activity public class MainActivity extends ListActivity {     private int intentNumber = 0;     @Ove ...

  7. scala学习笔记——特质

    一个类扩展自一个或多个特质,以便使用这些特质提供的服务.特质可能会要求使用它的类支持某个特定的特性.不过和java不同,Scala特质可以给出这些特性的缺省实现. 特质的特性: 类可以实现任意数量的特 ...

  8. VMware 虚拟机(linux)增加根目录磁盘空间 转自

    转自 http://wenku.baidu.com/link?url=WZDgESO0oXqYfhPYOWFalZsMglS0HKtLw7t6ICRs_sJ_sfPc85RpxsqKMwqSniis0 ...

  9. iOS_SN_CoreDate(一)封装使用

    看过一篇封装CoreData的文章挺不错,有基本使用封装,但是没有写怎么与tableView结合使用,我自己用的过程有些小波折,自己做了一个demo,大家可以看源码一些基本使用应该不难了, 原文:ht ...

  10. Spring 学习笔记01

    以一个论坛登陆模块来讲解如何使用spring 登陆功能虽然简单,但是模块虽然很小,但是基本包括了一般的web应用的操作.涵盖了持久层数据访问(数据库相关操作).业务层事务管理(数据库操作回滚等).展现 ...